我們在開發中常常需要利用一些假數據來做測試,這種時候就可以使用 `Faker` 來偽造數據從而用來測試.
[**Faker**](https://link.jianshu.com?t=https://github.com/joke2k/faker) 是一個可以讓你生成偽造數據的Python包。當你需要初始化數據庫,創建美觀的XML文檔,不斷產生數據來進行壓力測試或者想從生產服務器上拉取匿名數據的時候,Faker將是你最棒的選擇。
## 安裝
Faker庫已經被提交到 [**pip**](https://link.jianshu.com?t=https://pypi.python.org/pypi/Faker),可以通過 pip 工具直接安裝。
~~~
pip install Faker
~~~
## 使用
[**官方文檔**](https://link.jianshu.com?t=http://faker.readthedocs.io/en/master/)
faker 提供了一個工廠函數,用來創建數據。
~~~
>>> from faker import Factory
>>> fake1 = Factory.create()
~~~
當然,也提供一個Faker類來創建實例
~~~
>>> from faker import Faker
>>> fake2 = Faker()
>>>
>>> fake2.name()
'Audrey Robinson'
>>> fake2.address()
'4266 Fritz Shore\nLewischester, AL 24594-7593'
>>> fake2.text()
'Odio porro unde sint aliquid beatae. Ex officiis porro nostrum laboriosam deleniti nisi. A aut molestiae ratione ipsam perspiciatis facere.\nDicta incidunt at deleniti recusandae accusamus quisquam.'
~~~
每次調用方法 `fake.name()` 都會產生不同的(隨機)結果。這是因為 faker 向 `faker.Generator.method_name()` 調用了 `faker.Generator.format(method_name)`。
## 本地化
在用 `Faker()` 創建 faker 實例時,可以為實例指定本地化區域參數,默認為 'en\_US`,因此生成的姓名、地址等都是美國的。
要生成中文偽造數據,只需:
~~~
>>> fake = Faker("zh_CN")
~~~
## 方法介紹
如上面例子,每次調用 fake 實例的 `name()`方法時,都會產生不同隨機姓名。fake 實例還有很多方法可用,這些方法分為以下幾類:
* address 地址
* person 人物類:性別、姓名等
* barcode 條碼類
* color 顏色類
* company 公司類:公司名、公司email、公司名前綴等
* credit\_card 銀行卡類:卡號、有效期、類型等
* currency 貨幣
* date\_time 時間日期類:日期、年、月等
* file 文件類:文件名、文件類型、文件擴展名等
* internet 互聯網類
* job 工作
* lorem 亂數假文
* misc 雜項類
* phone\_number 手機號碼類:手機號、運營商號段
* python python數據
* profile 人物描述信息:姓名、性別、地址、公司等
* ssn 社會安全碼(身份證號碼)
* user\_agent 用戶代理
### address 地址
~~~
>>> fake.country() # 國家
'奧地利'
>>> fake.city() # 城市
'鄭州市'
>>> fake.city_suffix() # 城市的后綴,中文是:市或縣
'市'
>>> fake.address() # 地址
'河北省巢湖縣懷柔南寧路f座 169812'
>>> fake.street_address() # 街道
'邯鄲路W座'
>>> fake.street_name() # 街道名
'合肥路'
>>> fake.postcode() # 郵編
'314548'
>>> fake.latitude() # 維度
Decimal('68.0228435')
>>> fake.longitude() # 經度
Decimal('155.964341')
~~~
### person 人物
~~~
>>> fake.name() # 姓名
'單玉珍'
>>> fake.last_name() # 姓
'潘'
>>> fake.first_name() # 名
'琴'
>>> fake.name_male() # 男性姓名
'官平'
>>> fake.last_name_male() # 男性姓
'安'
>>> fake.first_name_male() # 男性名
'文'
>>> fake.name_female() # 女性姓名
'許穎'
~~~
### barcode 條碼
~~~
>>> fake.ean8() # 8位條碼
'12771363'
>>> fake.ean13() # 13位條碼
'9133134950963'
>>> fake.ean(length=8) # 自定義位數條碼,只能選8或者13
'20417161'
~~~
### color 顏色
~~~
>>> fake.hex_color() # 16進制表示的顏色
'#671f6d'
>>> fake.rgb_css_color() # css用的rgb色
'rgb(237,74,237)'
>>> fake.rgb_color() # 表示rgb色的字符串
'208,102,218'
>>> fake.color_name() # 顏色名字
'Brown'
>>> fake.safe_hex_color() #安全16進制色
'#ee4400'
>>> fake.safe_color_name() # 安全顏色名字
'maroon'
~~~
### company 公司
~~~
>>> fake.company() # 公司名
'時空盒數字科技有限公司'
>>> fake.company_suffix() # 公司名后綴
'科技有限公司'
~~~
### credit\_card 銀行信用卡
~~~
>>> fake.credit_card_number(card_type=None) # 卡號
'375325478746231'
>>> fake.credit_card_provider(card_type=None) # 卡的提供者
'VISA 13 digit'
>>> fake.credit_card_security_code(card_type=None)# 卡的安全密碼
'450'
>>> fake.credit_card_expire() # 卡的有效期
'04/22'
>>> fake.credit_card_full(card_type=None) # 完整卡信息
'Maestro\n秀芳 商\n502001016117 04/27\nCVV: 144\n'
~~~
### currency 貨幣
~~~
>>> fake.currency_code() # 貨幣代碼
'HNL'
~~~
### date\_time 時間日期
~~~
>>> fake.date_time(tzinfo=None) # 隨機日期時間
datetime.datetime(2001, 3, 18, 17, 57, 44)
>>> fake.iso8601(tzinfo=None) # 以iso8601標準輸出的日期
'1973-11-16T22:58:37'
>>> fake.date_time_this_month(before_now=True, after_now=False, tzinfo=None) # 本月的某個日期
datetime.datetime(2017, 11, 1, 14, 33, 48)
>>> fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) # 本年的某個日期
datetime.datetime(2017, 3, 2, 13, 55, 31)
>>> fake.date_time_this_decade(before_now=True, after_now=False, tzinfo=None) # 本年代內的一個日期
datetime.datetime(2010, 3, 26, 6, 33, 23)
>>> fake.date_time_this_century(before_now=True, after_now=False, tzinfo=None) # 本世紀一個日期
datetime.datetime(2015, 7, 21, 19, 27, 53)
>>> fake.date_time_between(start_date="-30y", end_date="now", tzinfo=None) # 兩個時間間的一個隨機時間
datetime.datetime(2005, 12, 3, 17, 17, 15)
>>> fake.timezone() # 時區
'America/Guatemala'
>>> fake.time(pattern="%H:%M:%S") # 時間(可自定義格式)
'11:21:52'
>>> fake.am_pm() # 隨機上午下午
'PM'
>>> fake.month() # 隨機月份
'02'
>>> fake.month_name() # 隨機月份名字
'August'
>>> fake.year() # 隨機年
'1974'
>>> fake.day_of_week() # 隨機星期幾
'Sunday'
>>> fake.day_of_month() # 隨機月中某一天
'02'
>>> fake.time_delta() # 隨機時間延遲
datetime.timedelta(13371, 27637)
>>> fake.date_object() # 隨機日期對象
datetime.date(1983, 1, 26)
>>> fake.time_object() # 隨機時間對象
datetime.time(17, 8, 56)
>>> fake.unix_time() # 隨機unix時間(時間戳)
1223246848
>>> fake.date(pattern="%Y-%m-%d") # 隨機日期(可自定義格式)
'1984-04-20'
>>> fake.date_time_ad(tzinfo=None) # 公元后隨機日期
datetime.datetime(341, 9, 11, 8, 6, 9)
~~~
### file 文件
~~~
>>> fake.file_name(category="image", extension="png") # 文件名(指定文件類型和后綴名)
'增加.png'
>>> fake.file_name() # 隨機生成各類型文件
'提供.pdf'
>>> fake.file_extension(category=None) # 文件后綴
'txt'
>>> fake.mime_type(category=None) # mime-type
'image/png'
~~~
### internet 互聯網
~~~
>>> fake.ipv4(network=False) # ipv4地址
'104.225.105.10'
>>> fake.ipv6(network=False) # ipv6地址
'dea6:ca11:39d0:b49f:fff1:82f1:bf88:698b'
>>> fake.uri_path(deep=None) # uri路徑
'search/categories'
>>> fake.uri_extension() # uri擴展名
'.htm'
>>> fake.uri() # uri
'https://www.wei.com/terms/'
>>> fake.url() # url
'http://zheng.org/'
>>> fake.image_url(width=None, height=None) # 圖片url
'https://www.lorempixel.com/700/990'
>>> fake.domain_word() # 域名主體
'hu'
>>> fake.domain_name() # 域名
'hu.cn'
>>> fake.tld() # 域名后綴
'com'
>>> fake.user_name() # 用戶名
'xia13'
>>> fake.user_agent() # UA
'Opera/8.33.(Windows NT 5.1; an-ES) Presto/2.9.171 Version/10.00'
>>> fake.mac_address() # MAC地址
'd6:38:cc:2a:76:b2'
>>> fake.safe_email() # 安全郵箱
'mingli@example.net'
>>> fake.free_email() # 免費郵箱
'tao44@gmail.com'
>>> fake.company_email() # 公司郵箱
'jingzhong@wang.cn'
>>> fake.email() # 郵箱
'changjun@hao.com'
~~~
### job 工作
~~~
>>> fake.job()#工作職位
'Dealer'
>>> fake.job()
'Musician'
~~~
### lorem 亂數假文
~~~
>>> fake.text(max_nb_chars=200) # 隨機生成一篇文章
'語言無法應用為什一點國內.要求完成如何世界電腦發布作品.經濟不同教育個人科技全國.\n在線學生發布信息上海狀態.\n聯系一次通過其實介紹世界.增加也是使用成功那個.\n商品免費管理公司.留言自己這種內容.\n次數內容知道這樣女人感覺.操作他的生產出現如何報告文章只有.\n個人文化中心不能發布最新.質量一下提高.感覺最大工具表示最后計劃.這是還有次數結果其實特別.'
>>> fake.word() # 隨機單詞
'能力'
>>> fake.words(nb=3) # 隨機生成幾個字
['國家', '經營', '結果']
>>> fake.sentence(nb_words=6, variable_nb_words=True) # 隨機生成一個句子
'重要更多我們作品地方增加.'
>>> fake.sentences(nb=3) # 隨機生成幾個句子
['制作上海學生.', '方式汽車一樣技術幫助歡迎.', '說明一種深圳經營電話帖子.']
>>> fake.paragraph(nb_sentences=3, variable_nb_sentences=True) # 隨機生成一段文字(字符串)
'非常環境位置有限發展首頁行業.情況對于出現部門這種覺得.產品以后因為雖然由于日本不同.'
>>> fake.paragraphs(nb=3) # 隨機生成成幾段文字(列表)
['就是發布要求有關這里國際.美國設備深圳經營.首頁也是支持報告.', '決定可是只有發現開始一直.最后有些項目正在深圳關系決定.下載注冊圖片更多進行他的那些.', '必須他們發生數據準備聯系.同時這樣內容學校精華.']
~~~
### misc 雜項
~~~
>>> fake.binary(length=10) # 隨機二進制字符串(可指定長度)
b'U\xa9@\x1e\x96\xe7\xca\x82\x14f'
>>> fake.language_code() # 隨機語言代碼
'tg'
>>> fake.md5(raw_output=False) # 隨機md5,16進制字符串
'cc4feebe419791332bbcff5e0fdf084a'
>>> fake.sha1(raw_output=False) # 隨機sha1,16進制字符串
'8ac0e9980f880860b6e45ae6fd257cc847b7ae8d'
>>> fake.sha256(raw_output=False) # 隨機sha256,16進制字符串
'033151f173f4a389e38e7df2363d89741f752c474e7bdfa2ee0a794bf0b505b5'
>>> fake.boolean(chance_of_getting_true=50) # 隨機真假值(得到True的幾率是50%)
False
>>> fake.null_boolean() # 隨機真假值和null
>>> fake.null_boolean()
True
>>> fake.password(length=10, special_chars=True, digits=True, upper_case=True, lower_case=True) # 隨機密碼(可指定密碼策略)
'F%722TJg_U'
>>> fake.locale() # 隨機本地代碼
'hy_AM'
>>> fake.uuid4() # 隨機uuid
'a50d17e7-bc4f-37a3-27b3-04a24fdd0055'
>>>
~~~
### phone\_number 電話號碼
~~~
>>> fake.phone_number() # 手機號碼
'13334603608'
>>> fake.phonenumber_prefix() # 運營商號段,手機號碼前三位
158
~~~
### python python數據
~~~
>>> fake.pyint() # 隨機int
7775
>>> fake.pyfloat(left_digits=None, right_digits=None, positive=False) # 浮點數
-84901.5586333
>>> fake.pydecimal(left_digits=None, right_digits=None, positive=False) # 隨機高精度數
Decimal('-12273687068527.0')
>>> fake.pystr(min_chars=None, max_chars=20) # 隨機字符串(可指定長度)
'cblutNKFIyegfcHPrjzx'
>>> fake.pybool() # 隨機bool值
True
>>> fake.pyiterable(nb_elements=10, variable_nb_elements=True) # 隨機iterable
['ODfeVvcbAjPDBGwzljQw', 'https://www.tan.cn/list/category/homepage.php', 'YQlrsFkBieyKYaXlCljJ', Decimal('42778240911787.2'), Decimal('957411812.6383'), 'TGbqZufoiUXLQTZDrVcP', 'http://yan.com/posts/tags/search/terms.php', 3.680492634254, 'min57@hotmail.com', datetime.datetime(2001, 8, 16, 6, 10, 49), 'xMMOjlETIgKGqVGTrChG', 'yong83@xu.cn']
>>> fake.pylist(nb_elements=10, variable_nb_elements=True ) # 隨機生成一個list
['KXQMXAkcEMSLfnIZkgJb', 'BtowiRsuIqyyULnSYYdr', datetime.datetime(2011, 10, 10, 14, 44, 2), datetime.datetime(2008, 5, 10, 1, 38, 38), 'juan47@hotmail.com', 'QEsdUpEqHLpThyWCjkNx', Decimal('-801375867.9'), 'ucDyeZnHAXfZtkwdVUbR', 4707, datetime.datetime(1974, 8, 7, 1, 54, 29)]
>>> fake.pydict(nb_elements=10, variable_nb_elements=True) # 隨機字典
{'其中': 9047, '一直': 'AUiUjuqccIdVAWSqzDbW', '選擇': 'ddong@hotmail.com', '開發': datetime.datetime(1972, 10, 20, 14, 14, 9), '電影': 'KYmolBhkjSRxloXXFUUT', '文化': 2681, '這里': 'uyang@yahoo.com', '不會': 'ZPkwuxWsrJSHMNuFiWEx', '社會': 'CiujeaZMZSuyYwuKzEdN'}
>>> fake.pyset(nb_elements=10, variable_nb_elements=True) # 隨機set
{'bhe@hotmail.com', 'http://fu.cn/list/home.htm', 'MlJluVirRkofBnKNtphM', 296, 'ghoUSHkuEGmCzlJFKyHZ', datetime.datetime(2008, 4, 4, 2, 55, 4), 'AgbynHjdvwYpUkbMsfqr', 8751, 9649, 'tangguiying@hotmail.com', Decimal('5727570036.91'), 'HmDkExndcQIOaTtsSpsc', 'hjQlLLXuHVVzENEwoHJK'}
>>> fake.pytuple(nb_elements=10, variable_nb_elements=True) # 隨機tuple
('http://www.cai.com/index/', datetime.datetime(1973, 7, 28, 2, 12, 23), 'khltJQMYJvIDRMYodviZ', 'uJezUsEqiHaiFxwOPWvl', 'qojwZHyytBSQQavkDaTu', 'AHUCHYuVJTHnoSEuQDSY', 1012, 'uEYVuzeTlgVhrnCATfKw', 'https://www.zhou.com/categories/tags/main/', 'LbLSFZPeATtzHvbmYhGr')
>>> fake.pystruct() # 隨機生成3個有10個元素的python數據結構
([datetime.datetime(1996, 10, 26, 7, 35, 26), datetime.datetime(1998, 2, 28, 17, 20, 8), 'qianming@hotmail.com', 'yEWMrpTqtAHfbxqldGrb', 'YgKYOnrjuthOrOXhlYIl', datetime.datetime(1994, 12, 10, 0, 55, 30), Decimal('-6865068.3'), 'SYHFHiFvJlRVPcCKumUM', -8619.4354, 'kwGipwcASeALLeKdaWBi'], {'同時': 'BvtYdkNTHwZNMiIIRwKd', '空間': 310959668662.457, '特別': 'PZQDBuuQWkcdryMloyKS', '音樂': Decimal('-7219015925.0'), '項目': 'https://www.zhou.cn/main.php', '回復': 30.408750841, '顯示': 'etZMrsjXJgZpDfZWhpoS', '大小': 7472, '類型': 'OsjpxgLqnTcdVOlHoMoP', '什么': 'http://www.xia.com/posts/app/index/'}, {'朋友': {0: -415025.243093017, 1: [1799, 585, 'shu@hotmail.com'], 2: {0: 9980, 1: 'qnOnFTzGnsjvXGybBnMF', 2: ['http://zheng.cn/list/search/tag/faq.html', Decimal('964285276661463.0')]}}, '發生': {1: -5339010.6134, 2: [datetime.datetime(1987, 6, 23, 15, 21, 45), 'SvSpvKqTXlJvdQhHScwM', 'PZjKOYzZzoNVsHLRcARQ'], 3: {1: 'https://www.yan.cn/register/', 2: 2191, 3: ['HMHKQuLRBQaaAypRbtHU', datetime.datetime(2014, 5, 24, 3, 32, 36)]}}, '我的': {2: 'linxia@yahoo.com', 3: ['http://gu.com/about.php', 'DhzpWYkgLCobGSHDLXzI', 1420], 4: {2: datetime.datetime(1986, 2, 22, 4, 50, 12), 3: 'rRHwQQzkpAMBQxwVITBa', 4: [datetime.datetime(1984, 2, 6, 11, 52, 18), -73821572962388.7]}}, '全部': {3: 'uMQeeBXYNGhrHnAerdjp', 4: [323329.56403, 'kFvqXFhhtQPNtrOjKtxa', 'http://peng.cn/'], 5: {3: 'lcaoeisYIAOsuRjbOXia', 4: Decimal('-902407032449085.0'), 5: [2296, 'uyuWgnsONzLluXqXdASM']}}, '大小': {4: 'min63@hotmail.com', 5: [datetime.datetime(1991, 10, 22, 19, 21, 48), 'cDYEScdIokWuvGhRkWqs', 'XeDJojWyywFvzmWYaokO'], 6: {4: Decimal('-4167029.2915827'), 5: 4030, 6: [6372, 'xfRXXEFGsNQpeIGmbaHU']}}, '語言': {5: 'https://www.guo.cn/', 6: [6498, datetime.datetime(1981, 12, 3, 18, 4, 29), 42598100345.61], 7: {5: 'http://zheng.cn/', 6: -229316.268238, 7: ['https://www.qiao.cn/home/', 'GtaEXeVxjRnnkggjEguv']}}, '表示': {6: 'xcBvcGUWxdMhDqgzmhSd', 7: ['kwDaFhyTKqHajGSaNOMf', 8561, 5456], 8: {6: 'https://zhou.cn/tags/tag/faq.html', 7: 'IGayAZtTQVlSOasQwgug', 8: ['iCjwBzHfmPSLqAgmIOle', 70511766106574.5]}}, '電子': {7: 'http://www.lu.org/tags/posts/terms/', 8: [datetime.datetime(1978, 8, 11, 12, 16, 35), 'https://song.cn/main/categories/homepage.html', 'https://long.com/register.html'], 9: {7: 'nFJNhyMYBvfTxrYwYPUQ', 8: -2252757903.0, 9: ['GuJnhMEgXoMAivrgGZie', datetime.datetime(2014, 5, 29, 1, 17, 50)]}}, '的人': {8: 'WgHePwYSPgSiPllXpLlJ', 9: [1782, 'fSepbXwpvhiBphzDTDNC', -9117731.63459416], 10: {8: 5602, 9: 3664, 10: ['http://www.mao.com/search/tag/main/', Decimal('5579.7377')]}}, '不過': {9: 'rOfkDPTHvzKbfvQHbPNm', 10: [314.397, 'StqeLyXkIDKHfExSjggk', 'xiuyingkang@gao.cn'], 11: {9: 'BLKNdcccamYzBwRcMxlx', 10: 'yongduan@gong.org', 11: ['ZocoQHdbhaNloWALnzwt', 'eWVvvHurAlZZRxlYHZXi']}}})
~~~
### profile 人物描述信息
~~~
>>> fake.profile(fields=None, sex=None) # 人物描述信息:姓名、性別、地址、公司等
{'job': 'Licensed conveyancer', 'company': '萬迅電腦信息有限公司', 'ssn': '370684199902182726', 'residence': '福建省小紅市南長廣州街K座 406448', 'current_location': (Decimal('18.050895'), Decimal('-0.877117')), 'blood_group': '0-', 'website': ['https://www.yi.org/', 'https://www.hu.com/', 'https://www.yin.cn/'], 'username': 'minghuang', 'name': '后英', 'sex': 'F', 'address': '安徽省秀榮市璧山嘉禾路T座 954960', 'mail': 'czhong@hotmail.com', 'birthdate': '1975-03-09'}
>>> s = fake.simple_profile(sex="m") # 人物精簡信息
>>> for i,v in s.items():
... print(i,v)
...
username chao85
name 邴宇
sex M
address 陜西省東市朝陽廖街Y座 757661
mail xiazhang@gmail.com
birthdate 1996-09-20
~~~
### ssn 社會安全碼(身份證)
~~~
>>> fake.ssn() # 隨機生成身份證號(18位)
'140100196612297997'
>>> len(fake.ssn())
18
~~~
### user\_agent 用戶代理
常用在偽造瀏覽器信息
~~~
>>> fake.user_agent() # 偽造UA
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5361 (KHTML, like Gecko) Chrome/15.0.812.0 Safari/5361'
~~~
平臺信息偽造
~~~
>>> fake.linux_platform_token()
'X11; Linux i686'
>>> fake.linux_processor()
'i686'
>>> fake.windows_platform_token()
'Windows CE'
>>> fake.mac_platform_token()
'Macintosh; Intel Mac OS X 10_7_4'
>>> fake.mac_processor()
'PPC'
~~~
瀏覽器偽造
~~~
>>> fake.internet_explorer() # IE瀏覽器
'Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 6.1; Trident/4.0)'
>>> fake.opera() # opera瀏覽器
'Opera/9.37.(Windows 95; doi-IN) Presto/2.9.178 Version/10.00'
>>> fake.firefox() # firefox瀏覽器
'Mozilla/5.0 (Windows NT 5.0; te-IN; rv:1.9.2.20) Gecko/2015-09-28 13:29:05 Firefox/12.0'
>>> fake.safari() # safari瀏覽器
'Mozilla/5.0 (Windows; U; Windows NT 4.0) AppleWebKit/533.37.4 (KHTML, like Gecko) Version/5.0 Safari/533.37.4'
>>> fake.chrome() # chrome瀏覽器
'Mozilla/5.0 (Windows 98; Win 9x 4.90) AppleWebKit/5361 (KHTML, like Gecko) Chrome/14.0.866.0 Safari/5361'
~~~
## 自定義擴展
Faker 已經提供了足夠豐富的信息生成,包括名字、手機號、郵箱地址、郵編等等。盡管如此,可能還是沒有辦法滿足你的需求。這時,可以利用自定義擴展,引用外部的 provider,自定義你要的功能。
Faker 對象可以通過 `add_provider` 方法將自定義的 Provider 添加到對象中,自定義的 Provider 需要繼承自 BaseProvider。
~~~
from faker import Faker
fake = Faker()
# first, import a similar Provider or use the default one
from faker.providers import BaseProvider
# create new provider class
class MyProvider(BaseProvider):
def foo(self):
return 'bar'
# then add new provider to faker instance
fake.add_provider(MyProvider)
# now you can use:
print(fake.foo())
~~~
結果顯示:
~~~
bar
~~~
## 隨機控制
`Faker` 隨機生成由 `random.Random` 驅動。其中,`.random` 屬性返回 `random.Random` 對象。通過對該對象的操作,可以實現自定義的行為。
~~~
from faker import Faker
fake = Faker()
fake.random
fake.random.getstate()
~~~
那么,可以實現什么自定義呢?舉個例子,我們可以設置 `seed`,通過給定的 `seed` 可以控制每次生成的內容都是一樣的。
~~~
>>> from faker import Faker
>>> fake = Faker()
>>> fake.random.seed(4321)
>>> fake.name()
'Ryan Gallagher'
>>> fake.address()
'7631 Johnson Village Suite 690\nAdamsbury, NC 50008'
>>> fake.random.seed(4321)
>>> fake.name()
'Ryan Gallagher'
>>> fake.address()
'7631 Johnson Village Suite 690\nAdamsbury, NC 50008'
~~~
不同的兩次運行,只要seed一樣,生成出來的信息就是一樣的。
注意:`fake.random.seed(4321)` 可以寫成 `fake.seed(4321)` 。
## 命令行生成
有時想在shell或者其他程序中生成一些偽數據,是不是一定要寫一個Python腳本呢?別急——Faker提供了一個命令行工具,估計可以應對大部分場景了:
~~~
$ faker address
968 Bahringer Garden Apt. 722Kristinaland, NJ 09890
$ python3 -m faker address
432 Marvin Wells Apt. 593\nWest Eric, DC 45650-8420
$ faker -l de_DE address
Samira-Niemeier-Allee 5694812 Biedenkopf
$ faker profile
{'job': 'Designer, blown glass/stained glass', 'company': 'Dennis-Bowers', 'ssn': '034-28-9965', 'residence': '34796 Jeremiah Station Apt. 782\nWest Timothy, TX 24139-6974', 'current_location': (Decimal('-47.425017'), Decimal('-42.743615')), 'blood_group': '0+', 'website': ['https://www.gardner.biz/', 'http://glover-ellison.info/', 'http://www.harrison.biz/'], 'username': 'patrick33', 'name': 'Alexandra Montgomery', 'sex': 'F', 'address': '2314 Collier Stream Suite 093\nMcintyreside, UT 19553', 'mail': 'gomezterri@hotmail.com', 'birthdate': '2005-01-30'}
$ faker profile ssn,name
{'ssn': '344-68-7420', 'name': 'Veronica Brennan'}
$ faker -r=3 -s=";" name
Willam Kertzmann;
Josiah Maggio;
Gayla Schmitt;
~~~
faker 命令幫助:
~~~
faker [-h] [--version] [-o output]
[-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}]
[-r REPEAT] [-s SEP]
[-i {module.containing.custom_provider othermodule.containing.custom_provider}]
[fake] [fake argument [fake argument ...]]
~~~
選項說明:
* `faker` : 在shell中,`faker` 命令也可以用 `python -m faker` 來代替
* `-h`,`--help` : 幫助信息
* `--version` :顯示版本
* `-o FILENAM` :輸出結果到文件中
* `-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}` :指定本地化,`zh_CN` 表示中文
* `-r REPEAT` :指定生成多少條相同類型的數據
* `-s SEP` :在每個輸出后邊添加指定的分隔符
* `-i {my.custom_provider other.custom_provider}` :自定義擴展,`prividers`列表。注意,這里要指定包含你 `provider` 類的模塊的路徑,而不是程序本身。
* `fake` :指定方法名稱,如:`name` , `address` , `text` 等
* `[fake argument ...]` :為方法指定參數。如上例,為 `profile` 方法指定 `ssn` 和 `name` 參數,只輸出這兩個類型的內容。
- 前言
- 環境搭建
- pypi
- 打包
- Python 2 和 Python 3 的版本之間差別
- 項目
- 第一部分
- 第1章 基礎
- Python安裝
- python代碼文件類型
- python對象
- 核心數據類型
- 核心數據類型--整型和浮點型
- 核心數據類型--字符串
- str.format
- 核心數據類型--列表
- 核心數據類型--元組
- 核心數據類型--字典
- 核心數據類型--集合
- 核心數據類型--文件對象
- 調用bash
- 標準輸入輸出
- str-repr
- 字符編碼
- 迭代器和生成器
- 第2章 語句和語法
- 賦值語句
- if語句
- while語句
- for語句
- assert
- 第3章 函數
- 函數作用域
- 工廠函數
- 內置函數
- 遞歸
- 嵌套作用域和lambda
- 參數傳遞
- 函數式編程
- property可寫與可讀
- 第5章 模塊
- 模塊導入
- 模塊命名空間
- 相對導入和絕對導入
- 模塊重載
- 在模塊中隱藏數據
- 過渡性重載
- 第6章 類
- 面向對象還是面向過程?
- 構造函數 析構函數
- call
- 運算符重載
- str()
- 待定
- 即時生成屬性
- 多態
- 線程和進程
- thread模塊
- threading模塊
- threading線程鎖
- 糖果機
- multiprocessing
- 阻塞非阻塞同步異步
- 單線程和多線程對比
- 生產者消費者模型
- 第二部分
- 獲取系統資源信息
- 獲取進程所占的物理內存
- dmidecode獲取系統信息
- 網絡編程
- 網絡基礎
- python中的套接字
- socket模塊
- 第三部分 高級功能
- 閉包入門
- 閉包的應用
- 裝飾器入門
- 裝飾器應用
- 第四部分 項目實戰
- graphite
- 模塊
- collections
- datetime
- Enum
- faker
- fabric
- fileinput
- fire
- fnmatch
- getpass
- glob
- hashlib
- heapq
- json模塊
- log
- os
- Paramiko
- parser
- platform
- pyyaml
- Queue
- random
- re
- 特殊符號和字符
- re模塊
- shelves
- subprocess
- time
- urllib_urllib2_requests
- urllib urllib2
- requests
- 標準模塊ConfigParser
- 擴展模塊Mysqldb
- 擴展模塊dns
- 擴展模塊request
- uuid
- cacheout 緩存庫
- delorean 時間
- 附錄
- 內置函數
- python實現各種排序算法
- 常見報錯
- pymongo
- pyrocksdb
- 常用
- ERROR