web-dev-qa-db-fra.com

Écrire une liste de chaînes dans un fichier CSV Excel en Python

J'essaie de créer un fichier csv contenant le contenu d'une liste de chaînes en Python, à l'aide du script ci-dessous. Cependant, lorsque je vérifie mon fichier de sortie, il s'avère que chaque caractère est délimité par une virgule. Comment puis-je demander au CSV.writer de délimiter chaque chaîne de la liste plutôt que chaque caractère? Dans ce cas, j'utilise Python 2.6 sur Snow Leopard.

J'ai vérifié le guide Python et je n'ai rien trouvé de spécifique:
http://www.python.org/dev/peps/pep-0305/#managing-different-dialects

import csv

# Define Data
RESULTS = ['Apple','cherry','orange','pineapple','strawberry']

# Open File
resultFyle = open("output.csv",'wb')

# Create Writer Object
wr = csv.writer(resultFyle, dialect='Excel')

# Write Data to File
for item in RESULTS:
    wr.writerow(item)
36

La méthode csv.writerwriterow prend un argument itérable. Votre jeu de résultats doit être une liste (lignes) de listes (colonnes).

csvwriter.writerow(row)

Ecrivez le paramètre de ligne dans l’objet fichier de l’écrivain, formaté en fonction du dialecte actuel.

Faire soit:

import csv
RESULTS = [
    ['Apple','cherry','orange','pineapple','strawberry']
]
with open("output.csv",'wb') as resultFile:
    wr = csv.writer(resultFile, dialect='Excel')
    wr.writerows(RESULTS)

ou:

import csv
RESULT = ['Apple','cherry','orange','pineapple','strawberry']
with open("output.csv",'wb') as resultFile:
    wr = csv.writer(resultFile, dialect='Excel')
    wr.writerow(RESULT)
63
GaretJax

Très simple à corriger, il vous suffit de transformer le paramètre en writerow dans une liste.

for item in RESULTS:
     wr.writerow([item,])
17
Mark Ransom

Je sais que je suis un peu en retard, mais quelque chose qui fonctionne (et ne nécessite pas l'utilisation de csv) consiste à écrire une boucle for qui écrit dans votre fichier pour chaque élément de votre liste.

# Define Data
RESULTS = ['Apple','cherry','orange','pineapple','strawberry']

# Open File
resultFyle = open("output.csv",'w')

# Write data to file
for r in RESULTS:
    resultFyle.write(r + "\n")
resultFyle.close()

Je ne sais pas si cette solution est meilleure que celles déjà proposées, mais elle reflète plus fidèlement votre logique d'origine et j'ai donc pensé partager.

5
Daniel Fridkin

Exemple - écrivez plusieurs lignes avec une colonne booléenne (utilisez l'exemple ci-dessus de GaretJax et Eran?).

import csv
RESULT = [['IsBerry','FruitName'],
          [False,'Apple'],
          [True, 'cherry'],
          [False,'orange'],
          [False,'pineapple'],
          [True, 'strawberry']]
with open("../datasets/dashdb.csv", 'wb') as resultFile:
    wr = csv.writer(resultFile, dialect='Excel')
    wr.writerows(RESULT)

Résultat:

df_data_4 = pd.read_csv('../datasets/dashdb.csv')
df_data_4.head()

Sortie:

   IsBerry  FruitName
   0    False   Apple
   1    True    cherry
   2    False   orange
   3    False   pineapple
   4    True    strawberry
0
Ragu