J'essaye de créer un fichier .csv avec les valeurs d'une liste Python. Lorsque j'imprime les valeurs dans la liste, elles sont toutes unicode (?), C'est-à-dire qu'elles ressemblent à ceci
[u'value 1', u'value 2', ...]
Si je parcours les valeurs de la liste, c'est-à-dire for v in mylist: print v
qu'elles semblent être du texte brut.
Et je peux mettre un ,
entre chacun avecprint ','.join(mylist)
Et je peux sortir dans un fichier, c'est à dire
myfile = open(...)
print >>myfile, ','.join(mylist)
Mais je veux sortir dans un CSV et avoir des délimiteurs autour des valeurs de la liste, par exemple
"value 1", "value 2", ...
Je ne trouve pas de moyen simple d'inclure les délimiteurs dans la mise en forme, par exemple, j'ai essayé l' join
instruction. Comment puis-je faire ceci?
Réponses:
Edit: cela ne fonctionne qu'avec python 2.x.
Pour le faire fonctionner avec python 3.x remplacer
wb
parw
( voir cette réponse SO )la source
csv
module dans 2.x ne gère pas correctement les unicodes; voir la documentation du module pour des exemples sur la façon de gérer cela. docs.python.org/library/csv.htmlTypeError: 'str' does not support the buffer interface
.'w'
comme ici: stackoverflow.com/questions/34283178/…Voici une version sécurisée d'Alex Martelli:
la source
with
, en s'assurant que le fichier est fermé une fois terminéwr.writerow(my_list)
qu'à l'intérieur de la boucle?Pour une autre approche, vous pouvez utiliser DataFrame dans les pandas : et il peut facilement vider les données en csv, tout comme le code ci-dessous:
la source
La meilleure option que j'ai trouvée était d'utiliser le
savetxt
dunumpy
module :Au cas où vous auriez plusieurs listes à empiler
la source
Utilisez le
csv
module de python pour lire et écrire des fichiers délimités par des virgules ou des tabulations. Le module csv est préféré car il vous donne un bon contrôle sur les citations.Par exemple, voici l'exemple travaillé pour vous:
Produit:
la source
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL))
remplit les données, peu importe si vous mettezopen("myfile.csv","w")
ou un nouveau fichieropen("myfile2.csv","w")
. On dirait que l'objet out ne peut pas traiter l'objet fichier créé lors de l'exécution, mais stocke le processus de sortie comme une tâche. En d'autres termes: l'objet out stocke l'objet fichier lors de la première exécution mais n'écrit que lorsque l'objet fichier existe déjà! Voir la bonne solution ci-dessous @Saurabh AdhikaryVous pouvez utiliser la méthode string.join dans ce cas.
Divisez en quelques lignes pour plus de clarté - voici une session interactive
Ou en une seule ligne
Cependant, vous pouvez avoir un problème si vos chaînes ont des guillemets incorporés. Si tel est le cas, vous devrez décider comment leur échapper.
Le module CSV peut s'occuper de tout cela pour vous, vous permettant de choisir entre différentes options de devis (tous les champs, uniquement les champs avec guillemets et séparateurs, uniquement les champs non numériques, etc.) et comment esacper les caractères de contrôle (guillemets doubles, ou chaînes échappées). Si vos valeurs sont simples, string.join sera probablement OK mais si vous devez gérer beaucoup de cas extrêmes, utilisez le module disponible.
la source
Cette solution semble folle, mais fonctionne bien comme du miel
Le fichier est en cours d'écriture par csvwriter donc les propriétés csv sont conservées, c'est-à-dire séparées par des virgules. Le délimiteur aide dans la partie principale en déplaçant les éléments de la liste à la ligne suivante, à chaque fois.
la source
data = [["value %d" % i, "value %d" % (i+1)] for i in range(1,4)] with open("myfile.txt","w") as f: out = csv.writer(f, quoting=csv.QUOTE_ALL, delimiter='\n') out.writerow([';'.join(x) for x in data])
Pour créer et écrire dans un fichier csv
L'exemple ci-dessous illustre la création et l'écriture d'un fichier csv. pour créer un écrivain de fichier dynamique, nous devons importer un package d' importation csv , puis créer une instance du fichier avec la référence de fichier Ex: - avec open ("D: \ sample.csv", "w", newline = "" ) en tant que file_writer
ici si le fichier n'existe pas avec le répertoire de fichiers mentionné, python créera un même fichier dans le répertoire spécifié, et "w" représente l'écriture, si vous voulez lire un fichier, remplacez "w" par "r" ou ajouter au fichier existant puis "a". newline = "" spécifie qu'il supprime une ligne vide supplémentaire à chaque fois que vous créez une ligne afin d'éliminer la ligne vide, nous utilisons newline = "", créez des noms de champs (noms de colonnes) en utilisant une liste comme fields = ["Names", "Age "," Class "] , puis appliquez à l'instance de writer comme writer = csv.DictWriter (file_writer, fieldnames = fields) ici en utilisant Dictionary writer et en attribuant des noms de colonne, pour écrire les noms de colonne dans csv, nous utilisons writer.writeheader () , tandis que l'écriture des valeurs de fichier doit être transmise à l'aide de la méthode du dictionnaire, ici la clé est le nom de la colonne et la valeur est votre valeur de clé respective
la source
Cahier Jupyter
Disons que votre liste est
A
Ensuite, vous pouvez coder l'annonce suivante, vous l'aurez sous forme de fichier csv (colonnes uniquement!)
la source
vous devriez utiliser le module CSV à coup sûr, mais il y a de fortes chances que vous deviez écrire unicode. Pour ceux qui ont besoin d'écrire unicode, voici la classe de la page d'exemple, que vous pouvez utiliser comme module util:
la source
Voici une autre solution qui ne nécessite pas le
csv
module.Exemple :
Cependant, si la liste initiale en contient ", ils ne seront pas échappés. Si c'est nécessaire, il est possible d'appeler une fonction pour l'échapper comme ça:
la source