151 votes

Comment écrire des données au format CSV sous forme de chaîne (et non de fichier) ?

Je veux lancer des données comme [1,2,'a','He said "what do you mean?"'] en une chaîne de caractères au format CSV.

Normalement, on utilise csv.writer() pour cela, parce qu'il gère tous les cas particuliers (échappement des virgules, échappement des guillemets, dialectes de CSV, etc. csv.writer() s'attend à ce que la sortie se fasse vers un objet fichier, et non vers une chaîne de caractères.

Ma solution actuelle est cette fonction un peu bricolée :

def CSV_String_Writeline(data):
    class Dummy_Writer:
        def write(self,instring):
            self.outstring = instring.strip("\r\n")
    dw = Dummy_Writer()
    csv_w = csv.writer( dw )
    csv_w.writerow(data)
    return dw.outstring

Quelqu'un peut-il proposer une solution plus élégante qui gère bien les cas limites ?

Edit : Voici comment j'ai fini par le faire :

def csv2string(data):
    si = StringIO.StringIO()
    cw = csv.writer(si)
    cw.writerow(data)
    return si.getvalue().strip('\r\n')

-1voto

Humberto Arocha Points 21
import csv
from StringIO import StringIO
with open('file.csv') as file:
    file = file.read()

stream = StringIO(file)

csv_file = csv.DictReader(stream)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X