首頁>技術>

平時我們在開發程式的時候,總免不了需要造一些假資料來驗證自己的程式功能是否正常。那麼你是透過什麼方式來造假資料的呢,不會每次都是手寫「測試資料、test」吧。

今天派森醬給大家介紹兩個超級好用的庫,批次生成各種假資料,比如使用者資訊,地址,日期,數字等等。

mimesis

mimesis 是一個高效能的偽資料生成器,目前支援 33 種不同的語言環境。透過該庫,我們可以生成各種測試資料、假的 API 介面、任意結構的 JSON 和 XML 資料以及隱藏生產環境的資料。

pip install mimesis

安裝好之後我們就可以直接使用了。

from mimesis import Personperson = Person('zh')print(f'name: {person.surname() + "" + person.name()}')print(f'sex: {person.sex()}')print(f'academic degree: {person.academic_degree()}')## 輸出結果name: 田曜巖sex: 男性academic degree: 研究生

在上面的程式中,我們建立了一個使用中文環境的 Person 物件,接著輸出該使用者的姓名,性別以及學歷。

下面我們看看 Person 物件裡面都有啥假資料。

print('\n'.join(('%s:%s' % item for item in person._data.items())))

結果如下所示:

除了姓名,性別這些基本資訊之外還有學歷、性取向、大學以及信仰等資訊。

另外,除了 Person 之外,mimesis 庫還提供了 Address、Food、Datetime 等方面的資料。

address = Address("zh")print(f'continent: {address.continent()}')print(f'province: {address.province()}')print(f'city: {address.city()}')print(f'street name: {address.street_name()}')## 輸出結果province: 安徽省city: 湛江市

除了省份,城市之外還有大陸、國家、州、街區等資訊。

food = Food("zh")print(f'dish: {food.dish()}')print(f'drink: {food.drink()}')## 輸出結果dish: 東坡肉drink: 紅茶

除了魚類和飲料之外還有水果、香料和蔬菜。

其實 mimesis 庫的強大不止於此,甚至我們可以使用該庫來返回特定格式的資料。這就要藉助 mimesis.schema 來實現了。

比如,我們要返回如下格式的 JSON 資料,那麼就可以這麼寫:

_ = Field('zh')schema = Schema(schema=lambda: {    'id': _('uuid'),    'name': _('person.name'),    'version': _('version', pre_release=True),    'timestamp': _('timestamp', posix=False),    'owner': {        'email': _('person.email', domains=['test.com'], key=str.lower),        'token': _('token_hex'),        'creator': _('full_name', gender=Gender.FEMALE)    },    'address': {        'country': _('address.country'),        'province': _('address.province'),        'city': _('address.city')    }})# 生成資料data = schema.create(iterations=2)

我們藉助 Flask 快速實現一個介面:

@app.route('/apps', methods=('GET',))def apps_view():    count = request.args.get('count', default=1, type=int)    data = schema.create(iterations=count)    return jsonify(data)

呼叫該介面獲得如下資料:

faker

faker 同樣是一個優秀的生成假資料的 Python 庫,支援多種語言環境,我們可以使用 pip 進行安裝。

pip install faker

試著獲取一下姓名,地址,日期等假資料

from faker import Fakerfaker = Faker(locale='zh_CN')print(f'name: {faker.name()}')print(f'address: {faker.address()}')print(f'date: {faker.date()}')## 輸出結果name: 劉晶address: 香港特別行政區平縣華龍深圳路l座 580988date: 2013-08-26

從上圖可以看出,faker 目前支援 22 個不同種類的假資料。

如果以上類別不能滿足需求,那麼 faker 同樣支援自定義擴充套件。

from faker.providers import BaseProviderclass MyProvider(BaseProvider):    def foo(self):        return 'bar'faker.add_provider(MyProvider)print(f'foo: {faker.foo()}')## 輸出結果foo: bar

最方便的是我們可以直接在命令列呼叫 faker,這對於某些場景簡直不要太方便,比如我們就需要一條使用者資訊的 JSON 資料,那麼就不需要再去寫一個 Python 指令碼了,直接在命令列呼叫 faker 命令即可生成假資料。

$ faker address香港特別行政區六安市海港哈爾濱街z座 561730$ faker -r=3 address湖南省海口市清浦王街h座 140394海南省銀川市孝南武漢街q座 623233青海省建華市蕭山李街w座 207439$ faker -r=3 profile name,address,birthdate{'name': '邵麗', 'address': '四川省想市上街吳街c座 399962', 'birthdate': datetime.date(1979, 8, 28)};{'name': '張秀華', 'address': '江西省亮市徐匯程街p座 527720', 'birthdate': datetime.date(1907, 6, 27)};{'name': '王瑩', 'address': '江西省博市房山太原路N座 615506', 'birthdate': datetime.date(1968, 2, 7)};
總結

今天我們介紹了兩款優秀的假資料生成庫,對於大部分場景都是可以滿足的了,希望小夥伴們能有所收穫。

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • EffectiveJava-5-列舉和註解