Мне нужны некоторые фиктивные данные в формате json для использования в другом проекте. Я в настоящее время использую Faker
пакет в коде ниже:python - генерация миллионов данных json
from json import dumps
from faker import Faker
import collections
database = []
filename = '1M'
length = 1000000
fake = Faker() # <--- Forgot this
for x in range(length):
database.append(collections.OrderedDict([
('last_name', fake.last_name()),
('first_name', fake.first_name()),
('street_address', fake.street_address()),
('email', fake.email())
]))
with open('%s.json' % filename, 'w') as output:
output.write(dumps(database, indent=4))
print "Done."
Этот код работает, но очень медленно. Я пробовал PyPy
, и я был потрясен результатами. В настоящее время я могу создать json-файл с 1 миллионом данных, который составляет около 220 Мб, в ~ 600 секунд. Проблема заключается в том, что когда я пытаюсь перейти дальше, например, 2 миллиона данных, которые я ожидаю, что это закончится через ~ 1200 секунд, сценарий будет запущен за это время, и я приветствую это исключение MemoryError
без объяснения причин произошло, я считаю, что у него есть что-то с PYPY_GC_MAX
, но опять-таки 2M-файл должен весить ~ 440mb.
При попытке исправить эту проблему, я все еще ищу способ сжать время генерации еще больше. Я пробовал понимание списка, map()
, результаты были такими же, как и для цикла.
Благодаря
Какой питон вы используете? –
Python 2.7.12 32bits – Be0wulf
Вам нужно использовать 'OrderedDict'? Вероятно, это увеличивает время. –