2017-10-19 14 views
1

Je tape sur un lien et j'obtiens un fichier json par hit. Ensuite, j'écris les données dans un fichier texte. Mais quand je veux le lire à nouveau, je veux le lire comme un dictionnaire. Comment puis-je faire cela.Combiner le dictionnaire et écrire dans un fichier texte et lire à nouveau comme dictionnaire?

def url_seq(limit=5): 
    for i in range(limit): 
     link = 'http:...x={}'.format(i) 
    yield link 

def json_seq(link): 
    for text in link: 
     with urllib.request.urlopen(text) as url: 
      data = json.loads(url.read().decode()) 
      yield data['data'] 

open('data.txt', 'w').close() 
for item in json_seq(url_seq(limit=100)): 
     with open('data.txt', 'a') as f: 
      json.dump(item, f) 
      f.write(',') 

Le fichier est eteint comme ça, {'x': 0.0, 'y': -7.462079426179981},{'x': 1.0, 'y':-5.300602624446985},{'x': 2.0, 'y': 1.4418651159990272}, ... ,

Mais je veux le lire comme un dictionnaire. Alors que je peux les mettre à un cadre de données pandas pour l'analyse.

Le code suivant me donne une liste, est-il possible de le lire dans un dictionnaire. Je suis un peu nouveau en Python, Désolé si je veux dire quelque chose de non-pythonique. Merci d'avance.

f = open('data.txt', 'r') 
lines = f.read().split(',') 
+0

Si vous l'enregistrez en tant que JSON, vous pouvez le charger en tant que JSON. –

Répondre

1

Je vous recommande de mettre tous vos éléments de données dans une liste, et de sauver qui comme un fichier JSON.

data = [x for x in json_seq(url_seq(limit=100))] 
with open('data.json', 'w') as f: 
    json.dump(data, f) 

Plus tard, vous pouvez lire le fichier JSON avec pd.read_json:

df = pd.read_json('data.json') 

Si vous voulez vraiment économiser de la mémoire, ajouter des accolades ouverture et de fermeture entre le item écrit.

with open('data.json', 'w') as f: 
    f.write('[') 
    for item in json_seq(url_seq(limit=100)): 
     f.write(json.dumps(item) + ',') 
    f.write(']') 
+0

En fait, je voulais enregistrer la mémoire et ne voulait pas enregistrer les données d'abord dans une liste, mais pour enregistrer les données directement dans le fichier texte, car les données seront vraiment grandes. – DataPsycho

+0

@DataPoliceInc. Voir éditer. En outre, si vous envisagez de le lire en tant que base de données pandas, vous pourriez simplement l'écrire comme un seul JSON, je ne vois pas quel serait le problème. –

+0

@COLDSPEED Maintenant je comprends. Merci beaucoup. – DataPsycho