Je ne parviens pas à ouvrir un fichier (montant2.csv), à le modifier, à le sauvegarder et à le fermer.
Comment ouvre-t-on un fichier, le sauvegarde et le ferme-t-il?
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é)
Le
<open file 'amount2.csv', mode 'r' at 0x1004656f0>
vous voyez n'est pas une erreur, mais le résultat de votre 'print f'. Pour 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, faites plutôt
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'infos sur Docs Python CSV
MODIFIER:
J'ai mal compris au début, vous voulez changer toutes les entrées de "1 douzaine" en "12" dans votre fichier csv. Je dirai d’abord, c’est plus facile de faire sans utiliser le module csv, mais voici une solution qui l’utilise.
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 débutez en programmation et en python, la ligne la plus trobuleuse est probablement
new_row = [ x.replace(key, value) for x in new_row ]
mais ceci est juste une compréhension de la 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 vous sera pas très utile ... Avez-vous déjà consulté la documentation du module CSV ? Le tout premier exemple de code vous montre comment utiliser csv.reader.