- Notifications
You must be signed in to change notification settings - Fork2k
Faker is a Python package that generates fake data for you.
License
joke2k/faker
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Faker is a Python package that generates fake data for you. Whetheryou need to bootstrap your database, create good-looking XML documents,fill-in your persistence to stress test it, or anonymize data taken froma production service, Faker is for you.
Faker is heavily inspired byPHP Faker,Perl Faker, and byRuby Faker.
_|_|_|_| _|_| _|_|_| _| _| _|_| _| _|_|_|_|_| _| _| _|_| _|_|_|_| _|_|_| _| _| _| _| _| _|_| _|_|_| _| _| _|_|_| _|
Starting from version4.0.0
,Faker
dropped support for Python 2 and from version5.0.0
only supports Python 3.8 and above. If you still need Python 2 compatibility, please install version3.0.1
in themeantime, and please consider updating your codebase to support Python 3 so you can enjoy thelatest featuresFaker
has to offer. Please see theextended docs for more details, especiallyif you are upgrading from version2.0.4
and below as there might be breaking changes.
This package was also previously calledfake-factory
which was already deprecated by the endof 2016, and much has changed since then, so please ensure that your project and its dependenciesdo not depend on the old package.
Install with pip:
pip install Faker
Usefaker.Faker()
to create and initialize a fakergenerator, which can generate data by accessing properties named afterthe type of data you want.
fromfakerimportFakerfake=Faker()fake.name()# 'Lucy Cechtelar'fake.address()# '426 Jordy Lodge# Cartwrightshire, SC 88120-6700'fake.text()# 'Sint velit eveniet. Rerum atque repellat voluptatem quia rerum. Numquam excepturi# beatae sint laudantium consequatur. Magni occaecati itaque sint et sit tempore. Nesciunt# amet quidem. Iusto deleniti cum autem ad quia aperiam.# A consectetur quos aliquam. In iste aliquid et aut similique suscipit. Consequatur qui# quaerat iste minus hic expedita. Consequuntur error magni et laboriosam. Aut aspernatur# voluptatem sit aliquam. Dolores voluptatum est.# Aut molestias et maxime. Fugit autem facilis quos vero. Eius quibusdam possimus est.# Ea quaerat et quisquam. Deleniti sunt quam. Adipisci consequatur id in occaecati.# Et sint et. Ut ducimus quod nemo ab voluptatum.'
Each call to methodfake.name()
yields a different (random) result.This is because faker forwardsfaker.Generator.method_name()
callstofaker.Generator.format(method_name)
.
for_inrange(10):print(fake.name())# 'Adaline Reichel'# 'Dr. Santa Prosacco DVM'# 'Noemy Vandervort V'# 'Lexi O'Conner'# 'Gracie Weber'# 'Roscoe Johns'# 'Emmett Lebsack'# 'Keegan Thiel'# 'Wellington Koelpin II'# 'Ms. Karley Kiehn V'
Faker
also has its ownpytest
plugin which provides afaker
fixture you can use in yourtests. Please check out the pytest fixture docs to learn more.
Each of the generator properties (likename
,address
, andlorem
) are called "fake". A faker generator has many of them,packaged in "providers".
fromfakerimportFakerfromfaker.providersimportinternetfake=Faker()fake.add_provider(internet)print(fake.ipv4_private())
Check theextended docs for a list ofbundled providers and a list ofcommunity providers.
faker.Faker
can take a locale as an argument, to return localizeddata. If no localized provider is found, the factory falls back to thedefault LCID string for US english, ie:en_US
.
fromfakerimportFakerfake=Faker('it_IT')for_inrange(10):print(fake.name())# 'Elda Palumbo'# 'Pacifico Giordano'# 'Sig. Avide Guerra'# 'Yago Amato'# 'Eustachio Messina'# 'Dott. Violante Lombardo'# 'Sig. Alighieri Monti'# 'Costanzo Costa'# 'Nazzareno Barbieri'# 'Max Coppola'
faker.Faker
also supports multiple locales. New in v3.0.0.
fromfakerimportFakerfake=Faker(['it_IT','en_US','ja_JP'])for_inrange(10):print(fake.name())# 鈴木 陽一# Leslie Moreno# Emma Williams# 渡辺 裕美子# Marcantonio Galuppi# Martha Davis# Kristen Turner# 中津川 春香# Ashley Castillo# 山田 桃子
You can check available Faker locales in the source code, under theproviders package. The localization of Faker is an ongoing process, forwhich we need your help. Please don't hesitate to create a localizedprovider for your own locale and submit a Pull Request (PR).
The Faker constructor takes a performance-related argument calleduse_weighting
. It specifies whether to attempt to have the frequencyof values match real-world frequencies (e.g. the English name Gary wouldbe much more frequent than the name Lorimer). Ifuse_weighting
isFalse
,then all items have an equal chance of being selected, and the selectionprocess is much faster. The default isTrue
.
When installed, you can invoke faker from the command-line:
faker [-h] [--version] [-o output] [-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}] [-r REPEAT] [-s SEP] [-i {package.containing.custom_provider otherpkg.containing.custom_provider}] [fake] [fake argument [fake argument ...]]
Where:
faker
: is the script when installed in your environment, indevelopment you could usepython -m faker
instead-h
,--help
: shows a help message--version
: shows the program's version number-o FILENAME
: redirects the output to the specified filename-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}
: allows use of a localizedprovider-r REPEAT
: will generate a specified number of outputs-s SEP
: will generate the specified separator after eachgenerated output-i {my.custom_provider other.custom_provider}
list of additional customproviders to use. Note that is the import path of the package containingyour Provider class, not the custom Provider class itself.fake
: is the name of the fake to generate an output for, such asname
,address
, ortext
[fake argument ...]
: optional arguments to pass to the fake (e.g. theprofile fake takes an optional list of comma separated field names as thefirst argument)
Examples:
$faker address968 Bahringer Garden Apt. 722Kristinaland, NJ 09890$faker -l de_DE addressSamira-Niemeier-Allee 5694812 Biedenkopf$faker profile ssn,birthdate{'ssn': '628-10-1085', 'birthdate': '2008-03-29'}$faker -r=3 -s=";" nameWillam Kertzmann;Josiah Maggio;Gayla Schmitt;
fromfakerimportFakerfake=Faker()# first, import a similar Provider or use the default onefromfaker.providersimportBaseProvider# create new provider classclassMyProvider(BaseProvider):deffoo(self)->str:return'bar'# then add new provider to faker instancefake.add_provider(MyProvider)# now you can use:fake.foo()# 'bar'
Dynamic providers can read elements from an external source.
fromfakerimportFakerfromfaker.providersimportDynamicProvidermedical_professions_provider=DynamicProvider(provider_name="medical_profession",elements=["dr.","doctor","nurse","surgeon","clerk"],)fake=Faker()# then add new provider to faker instancefake.add_provider(medical_professions_provider)# now you can use:fake.medical_profession()# 'dr.'
You can provide your own sets of words if you don't want to use thedefault lorem ipsum one. The following example shows how to do it with a list of words picked fromcakeipsum :
fromfakerimportFakerfake=Faker()my_word_list= ['danish','cheesecake','sugar','Lollipop','wafer','Gummies','sesame','Jelly','beans','pie','bar','Ice','oat' ]fake.sentence()# 'Expedita at beatae voluptatibus nulla omnis.'fake.sentence(ext_word_list=my_word_list)# 'Oat beans oat Lollipop bar cheesecake.'
Factory Boy already ships with integration withFaker
. Simply use thefactory.Faker
method offactory_boy
:
importfactoryfrommyapp.modelsimportBookclassBookFactory(factory.Factory):classMeta:model=Booktitle=factory.Faker('sentence',nb_words=4)author_name=factory.Faker('name')
The.random
property on the generator returns the instance ofrandom.Random
used to generate the values:
fromfakerimportFakerfake=Faker()fake.randomfake.random.getstate()
By default all generators share the same instance ofrandom.Random
, whichcan be accessed withfrom faker.generator import random
. Using this maybe useful for plugins that want to affect all faker instances.
Through use of the.unique
property on the generator, you can guaranteethat any generated values are unique for this specific instance.
fromfakerimportFakerfake=Faker()names= [fake.unique.first_name()foriinrange(500)]assertlen(set(names))==len(names)
Callingfake.unique.clear()
clears the already seen values.Note, to avoid infinite loops, after a number of attempts to find a uniquevalue, Faker will throw aUniquenessException
. Beware of thebirthdayparadox, collisionsare more likely than you'd think.
fromfakerimportFakerfake=Faker()foriinrange(3):# Raises a UniquenessExceptionfake.unique.boolean()
In addition, only hashable arguments and return values can be usedwith.unique
.
When using Faker for unit testing, you will often want to generate the samedata set. For convenience, the generator also provides aseed()
method,which seeds the shared random number generator. A Seed produces the same resultwhen the same methods with the same version of faker are called.
fromfakerimportFakerfake=Faker()Faker.seed(4321)print(fake.name())# 'Margaret Boehm'
Each generator can also be switched to use its own instance ofrandom.Random
,separated from the shared one, by using theseed_instance()
method, which actsthe same way. For example:
fromfakerimportFakerfake=Faker()fake.seed_instance(4321)print(fake.name())# 'Margaret Boehm'
Please note that as we keep updating datasets, results are not guaranteed to beconsistent across patch versions. If you hardcode results in your test, make sureyou pinned the version ofFaker
down to the patch number.
If you are usingpytest
, you can seed thefaker
fixture by defining afaker_seed
fixture. Please check out the pytest fixture docs to learn more.
Run tests:
$ tox
Write documentation for the providers of the default locale:
$ python -m faker> docs.txt
Write documentation for the providers of a specific locale:
$ python -m faker --lang=de_DE> docs_de.txt
Please seeCONTRIBUTING.
Faker is released under the MIT License. See the bundledLICENSE filefor details.
About
Faker is a Python package that generates fake data for you.