0
votes

Python: Ajouter le contenu d'un fichier CSV à une liste

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')


2 commentaires

Quel est le délimiteur pour votre fichier csv ?


Ça va être une virgule


4 Réponses :


0
votes

Essayez ceci. XXX


3 commentaires

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.



-1
votes
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])

2 commentaires

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.



0
votes

Vous pouvez utiliser le module CSV CODE> pour analyser le contenu CSV Row-Wise. Tout simplement avancer à la dernière ligne, supprimez les données intermédiaires: xxx pré>

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 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


0 commentaires

0
votes

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. xxx


0 commentaires