Python 2.7.1: Comment ouvrir, éditer et fermer un fichier CSV
j'ai de la difficulté à ouvrir un fichier (montant2.csv) effectuer un changement, le sauvegarder et fermer le fichier.
Comment ouvrir un fichier modifier, enregistrer et fermer?
import csv
changes = {
'1 dozen' : '12'
}
with open('amount2.csv', 'r') as f:
reader = csv.reader(f)
print f
f.close()
mon erreur: ouvrir le fichier ' amount2.csv', mode 'r' à 0x1004656f0 ( supprimé)
2 réponses
<open file 'amount2.csv', mode 'r' at 0x1004656f0>
vous voyez n'est pas une erreur, mais le résultat de votre impression 'f'. Au lieu de voir le contenu de votre fichier, vous feriez
with open('test.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
# row is a list of strings
# use string.join to put them together
print ', '.join(row)
Pour ajouter des lignes à votre fichier, au lieu de faire
changes = [
['1 dozen','12'],
['1 banana','13'],
['1 dollar','elephant','heffalump'],
]
with open('test.csv', 'ab') as f:
writer = csv.writer(f)
writer.writerows(changes)
Plus d'info Python CSV Docs
EDIT:
j'ai mal compris au début, vous voulez changer toutes les entrées de '1 douzaine' à '12' dans votre fichier csv. Je dirai d'abord, c'est plus facile à faire sans utiliser le csv module, mais ici, c'est une solution de l'utiliser.
import csv
new_rows = [] # a holder for our modified rows when we make them
changes = { # a dictionary of changes to make, find 'key' substitue with 'value'
'1 dozen' : '12', # I assume both 'key' and 'value' are strings
}
with open('test.csv', 'rb') as f:
reader = csv.reader(f) # pass the file to our csv reader
for row in reader: # iterate over the rows in the file
new_row = row # at first, just copy the row
for key, value in changes.items(): # iterate over 'changes' dictionary
new_row = [ x.replace(key, value) for x in new_row ] # make the substitutions
new_rows.append(new_row) # add the modified rows
with open('test.csv', 'wb') as f:
# Overwrite the old file with the modified rows
writer = csv.writer(f)
writer.writerows(new_rows)
si vous êtes nouveau dans la programmation et python, la ligne la plus trobulesome est probablement
new_row = [ x.replace(key, value) for x in new_row ]
mais ce n'est qu'une compréhension de liste qui est effectivement équivalente à
temp = []
for x in new_row:
temp.append( x.replace(key, value) )
new_row = temp
vous essayez d'imprimer l'objet fichier lui-même, ce qui ne sera pas très utile. Avez-vous regardé la documentation pour le module CSV? Le premier exemple de code montre comment utiliser csv.lecteur.