有些時候我們需要一些假數據來測試,在python中有一款非常好用的包,faker,可以滿足這類的需求。
項目地址 https://github.com/joke2k/faker
安裝:
pip install faker
或者
直接上 github 下載安裝即可
使用:
要創建假數據,需要先有一個faker實例
from faker import Faker
fake = Faker()
然後調用方法即可
fake.name()
# 'Kristen Ward'
fake.address()
# '26745 Todd Park'
# 'West Jamie, NV 91152-9807'
在faker中,name和address這種方法被稱爲提供器,提供器的類型很多,除了上面提到的name和address,還有:
- company : 公司
- zipcode : 郵編
bothify :創建隨機字符,他接受參數text,然後把text中的#和?替換成隨機的數字和字母,例子:
fake.bothify(text='### => ???') # 849 => DXX
實際上他是同時調用了lexify和numerify,兩者同樣需要一個text參數,分別把text中的#和?替換爲隨機數字和字母
faker的提供器很多,想查找更多提供器,請看:https://faker.readthedocs.io/...
本地化:
想要創建中文數據,可以使用下面的方法:
fake = Faker('zh_CN')
Faker接受的本地化參數,創建的對象會生成對應語言的數據,如果沒有找到對應的語言,會使用默認的"en_US"
可以在 https://faker.readthedocs.io/... 中查看所有支持的語言
自定義提供器:
有時候,你會想要創建自己的提供器,這時候只需要繼承提供器的基類,並實現一些方法,隨後調用add_provider將類加入到faker實例中即可
from faker import Faker
fake = Faker()
# 引入基類
from faker.providers import BaseProvider
# 創建並繼承,實現方法
class MyProvider(BaseProvider):
def foo(self):
return 'bar'
# 添加到實例中
fake.add_provider(MyProvider)
# 調用
fake.foo()
# 'bar'
隨機種子:
當你想要生成相同的數據時,你需要調用faker的seed方法爲其設置種子,這樣之後使用提供器的時候,便會產生相同的內容
fake.seed(136)
fake.name()
# 'Kelsey Hamilton'
注意,在設置隨機種子後,如果調用同一個提供器兩次,第二次調用會使faker實例的種子失效
fake.seed(1)
fake.name()
# 'Ryan Gallagher'
fake.address()
# '7631 Johnson Village Suite 690\nAdamsbury, NC 50008'
fake.name()
# 'Stanley Parks'
fake.seed(1)
fake.name()
# 'Ryan Gallagher'
fake.name()
# 'Jon Cole'
fake.address()
# '70669 Heather Grove\nNew Sierra, WI 00080-6360'