2017-08-24 2 views
0

quelqu'un peut-il me dire ce qui ne va pas ici. Je suis en train de lire un fichier texte contenant une liste de dictionnaires. [code] [1] 'Je ne suis pas sûr pourquoi les accolades secondes sont ajoutées ... Je reçois seulement cette erreur dans une boucle. Les réponses à des erreurs similaires semblent porter sur l'utilisation de input() ou raw_input. « Lis directement à partir d'un fichier texte commeEOF inattendue lors de l'analyse sans utiliser l'entrée

with open('mybundle.txt', 'r') as R: 
    list = []  
    my_data = R.read() 
    my_data = my_data.replace('[','') 
    my_data = my_data.replace(']','') 
    my_data.rstrip('\r\n') 
    my_data = my_data.split('},') 
import ast 
for a in my_data: 
    rec = a+'}' 
    list.append(rec) 
m = ast.literal_eval(list[100]) 
#Now this works.. 
print(m) 
print(m['open']) 

{'volume': 0, 'quoteVolume': 0, 'high': 260.00000522, 'low': 260.00000522, 'date': 1425801600, 'close': 260.00000522, 'weightedAverage': 260.00000522, 'open': 260.00000522} 
260.00000522 

try: 
df_=[ast.literal_eval(x) for x in list] 
df = pd.DataFrame(df_, index=['date'], columns= 
["high","low","open","close","volume","quoteVolume","weightedAverage"])  

except EOFError: 
#my_data = pd.DataFrame(list(my_data)) 
print(df.head()) 

File "<unknown>", line 1 {"date":1503403200,"high":3959,"low":3838.4845461,"open":3881.999999,"close":3887.75413166,"volume":6580841.4708805,"quoteVolume":1683.41702938,"weightedAverage":3909.21640688}} 

SyntaxError: EOF inattendu lors de l'analyse

+1

Collez votre code directement ici. Ne partagez pas les captures d'écran du texte. – smarx

Répondre

1

Est-ce que cela vous aide voyez le problème?

text = '{a},{b},{c}' 

for part in text.split('},'): 
    print('Part: {}'.format(part)) 
    print('Part with added curly brace: {}'.format(part + '}')) 

# Output: 
# Part: {a 
# Part with added curly brace: {a} 
# Part: {b 
# Part with added curly brace: {b} 
# Part: {c} 
# Part with added curly brace: {c}} 

Vous pouvez résoudre ce problème en ne pas ajouter une accolade au dernier élément de la liste de répartition, ou vous pouvez faire une sorte de parsing plus sensible. (Si vous pouvez contrôler la création de ce fichier, pensez à utiliser un format de sérialisation comme JSON à la place.)

+0

Haha ... ne sait pas si rire ou pleurer. Merci! – mikey1