avoir un nouveau problème avec cela que je pouvais faire avec une aide sur. Comme avant, je passe un CSV (avec une virgule comme séparateur) dans une liste. Le premier élément de la liste sera toujours un entier mais les deux suivantes seront des chaînes. J'essaie d'ajouter une nouvelle ligne à la CSV qui aura un nombre incrémenté dans le premier élément, mais j'ajouterai également des chaînes de hachage dans les deux autres éléments. Il fonctionne à la première exécution car le fichier est vide mais quand il essaie une seconde exécution, je reçois une erreur
chaîne_list = [int (i) pour i dans linelist [-1] .split (',')] p>
ValueError: littéral invalide pour int () avec base 10: '9891B18CF04418B92C0EE611201DA47F0047109097D81D0832CB2DAB83F65A4DC497FBFFC4332D7E794' P> blockQuote>
La première ligne du fichier que je passe contient: p>
1,0,9891B18CF04418B92C0EEE611201DA47EF00471090AEBDFA6667097D81D0832CB2EDAB83F65A4DC497FBFFC4332D7E794 P> blockQuote>
Mon code ressemble à ceci à la minute. Je ne sais pas comment se déplacer autour de cela? P>
#Check if chain_info.txt exists CHAIN_FILE_exists = os.path.isfile(CHAIN_FILE) #If chainfile is empty set element 0 in list to 1 if CHAIN_FILE_exists: if os.stat(CHAIN_FILE).st_size == 0: print('empty') fileHandle = open (CHAIN_FILE, 'a') fileHandle.write('1,0,0') fileHandle.close() fileHandle = open (CHAIN_FILE) lineList = fileHandle.readlines() fileHandle.close() chain_list = lineList[-1].split(',') chain_list = [int(i) for i in lineList[-1].split(',')] increment_value = 1 print('1 chain list now is: ' + str(chain_list)) else: #Read the last line of a file fileHandle = open (CHAIN_FILE) lineList = fileHandle.readlines() fileHandle.close() #Take last line of file and add to a list called chain_list chain_list = lineList[-1].split(',') chain_list = [int(i) for i in lineList[-1].split(',')] #increment the first value in the list by 1, this will be used to determine the block number increment_value = (chain_list[0]) increment_value = increment_value +1 chain_list.remove (chain_list[0]) chain_list.insert (0,increment_value) print('chain list now is: ' + str(chain_list)) #Open file fileHandle = open (CHAIN_FILE, 'a') #Write the contents of the list to the chain file on a new line and separate with a comma fileHandle.write('\n' + str(chain_list[0]) + ',' + str(chain_list[1])) fileHandle.close() else: print ('file does not exist')
4 Réponses :
Essayez ceci.
Pouvez-vous s'il vous plaît accepter et uplifier la réponse si elle résolvait votre problème. :-)
Juste une question de suivi. Le fichier contiendra des chiffres mais quand ils sont ajoutés à la liste, ils semblent être des chaînes. Comment puis-je les ajouter à la liste sous forme d'entiers?
Bravo, cela a travaillé mais maintenant face à un autre problème connexe. Va essayer de comprendre cela.
list1 = [] for ele in line: list1.append(ele[0]) list2 = [] for ele in line: list2.append(ele[0]) list3 = [] for ele in line: list3.append(ele[0]) your_list = [] your_list.append(list1[-1]) your_list.append(list2[-1]) your_list.append(list3[-1])
Salut! Votre réponse est arrivée dans la file d'attente de révision en raison de la longueur et du contenu. Les messages comme celui-ci sont signalés comme une qualité basse car les réponses de code que sont généralement découragées sur Stackoverflow. Veuillez ajouter une explication à votre réponse. Merci!
Désolé pour ça .. Vous avez ajouté plus de commentaires au code pour expliquer ce qu'il est censé faire et avoir ajouté plus d'explications à la réponse.
Vous pouvez utiliser le module Ceci fonctionne pour des fichiers arbitrairement volumineux, car il ne charge que des lignes individuelles au lieu de tout le fichier entier. P> Si le fichier est énorme et que vous souhaitez éviter les frais généraux de l'analyse des lignes abandonnées, passez à la dernière ligne et analysez uniquement cela. Vous pouvez utiliser CSV CODE> pour analyser le contenu CSV Row-Wise. Tout simplement avancer à la dernière ligne, supprimez les données intermédiaires:
suivant (csv.reader ([ligne])) code> pour analyser la dernière ligne ou quelque chose comme
rangée.split (...) code> si le format est Simple: P>
with open('c:\\securelog_workfiles\\chain_info.txt') as data:
for row in data: # do not parse each line
continue # skip through the csv row-wise
last_line_data = row.split(',') # parse the last line explicitly
Merci à tout le monde pour l'aide. Finalement obtenu cette petite pièce travaillant. La première ligne du fichier qui est toujours 1,0,0 est transmise à une liste appelée linéliste comme entièrement entiers.
Ensuite, le premier élément de cette liste qui a une valeur de 1 est incrémenté et imprimé à l'écran.
Quel est le délimiteur pour votre fichier
csv code>?
Ça va être une virgule