web-dev-qa-db-fra.com

Python 2.7.1: Comment ouvrir, éditer et fermer un fichier CSV

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

16
Sean

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

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.

0
Chuck Adams