эффективный метод для чтения и хранения данных, который находится в JSON - PullRequest
0 голосов
/ 12 декабря 2018
tweets_data = []
print('Opening file')
tweets_file = open('twitter_data.txt') #Its a file which has twitter data in JSON
start_time = time.time()
print('List generation in process')
for line in tweets_file:
   try:
      tweet = json.loads(line)
      tweets_data.append(tweet)
   except:
      continue
tweets_file.close()
print(len(tweets_data))

Я использую приведенный выше код для создания списка, который представляет собой данные Twitter (примерно 3 ГБ, полученные через Twitter API-поток), но моя программа работает более 3 часов.Мне нужен эффективный способ сделать это, так как я хочу использовать этот список для построения кадра данных.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я не уверен

tweets_data = []
print('Opening file')
tweets_file = open('twitter_data.txt') #Its a file which has twitter data in JSON
start_time = time.time()
append = tweets_data.append
print('List generation in process')
for line in tweets_file:
    try:
        tweet = json.loads(line)
        append(tweet)
    except:
        continue
tweets_file.close()
print(len(tweets_data))
0 голосов
/ 12 декабря 2018

Если вы перенесете свою попытку, кроме предложения, в функцию генератора, такую ​​как эта, это может помочь:

def readline(tweets_file):
    for line in tweets_file:
        try:
           tweet = json.loads(line)
           yield tweet
       except:
           continue

Делая это, вы не создадите список, поэтому вы не сможете выполнить len ()на нем, но вы все равно можете перебирать его без необходимости создавать целый список в памяти.Когда вы зацикливаетесь на генераторе, он будет выдавать один результат за раз.Если вы все еще хотели использовать len, вы можете преобразовать его в список, например:

len(list(readline(tweets_file)))

, или вы можете выполнить цикл по генератору и считать, например:

counter = 0
for json_result in realine(tweets_file):
    counter += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...