9 votes

Comment puis-je citer les caractères d'échappement dans le rédacteur csv en python ?

J'écris le fichier csv comme ceci

for a in products:
    mylist =[]
    for h in headers['product']:
        mylist.append(a.get(h))
        writer.writerow(mylist)

Mes quelques champs sont des champs de texte qui peuvent contenir n'importe quel caractère, par exemple , " ' \n ou autre chose. quelle est la manière la plus sûre d'écrire cela dans un fichier csv. le fichier contiendra également des entiers et des flottants.

11voto

nad2000 Points 1247

Vous devez utiliser QUOTE_ALL option de cotation :

import StringIO
import csv

row = ["AAA \n BBB ,222 \n CCC;DDD \" EEE ' FFF 111"]

output = StringIO.StringIO()
wr = csv.writer(output, quoting=csv.QUOTE_ALL)
wr.writerow( row )

# Test:
contents = output.getvalue()
parsedRow = list(csv.reader([contents]))[0]

if parsedRow == row: print "BINGO!"

3voto

Daniel Lee Points 2517

L'utilisation de csv.QUOTE_ALL garantit que toutes vos entrées seront citées comme suit : "value1","value2","value3" alors que l'utilisation de csv.QUOTE_NONE vous donnera : value1,value2,value3

De plus, cela changera tous vos guillemets dans les entrées en guillemets doubles comme suit. "somedata"user"somemoredata deviendra "somedata""user""somemoredata dans votre .csv écrit

Toutefois, si vous définissez votre caractère de citation comme étant le caractère de la barre oblique inversée (par exemple), votre entrée reviendra sous la forme \" pour tous les guillemets.

  create=csv.writer(open("test.csv","wb"),quoting=csv.QUOTE_NONEescapechar='\\', quotechar='"')
for element in file:
    create.writerow(element)

et l'exemple précédent deviendra somedata\"user\"somemoredata qui est propre. Il échappera également de la même manière à toutes les virgules que vous avez dans vos éléments.

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