2013-04-26 13 views
5

piszę pliku csv jak tenJak mogę zacytować uciec znaków w csv pisarza w Pythonie

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

Moi moi kilka pola są pola tekstowe mogą conatins żadnych znaków jak ,"'\n lub cokolwiek innego. jaki jest najbezpieczniejszy sposób zapisu tego w pliku csv. również plik będzie miał również liczby całkowite i pływaków

+1

To już działa, czy faktycznie masz problem? – jamylak

+0

Obecnie działa, ale nie wiedział, co jeszcze będzie działać na wszelkiego rodzaju dziwnych datach a, ludzie wejdą. powinienem użyć QUOTE_ALL, MINIMAL, NUMERYCZNEGO LUB CO – user2294401

Odpowiedz

6

Należy użyć QUOTE_ALL powołując opcję:

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!" 
0

użyciu csv.QUOTE_ALL zapewni, że wszystkie wpisy są notowane tak: "value1","value2","value3" podczas korzystania CSV. QUOTE_NONE da ci: `wartość1, wartość2, wartość3

Dodatkowo zmieni to wszystkie twoje cytaty w pozycjach podwójnego cudzysłowu w następujący sposób. "somedata"user"somemoredata staną "somedata""user""somemoredata w pisemnej .csv

Jeśli jednak ustawić quotechar do znaku backslash (na przykład), Twój wpis powróci jako \”dla wszystkich cytatów.

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

i tym poprzedni przykład stanie się czysty somedata\"user\"somemoredata.Zostanie także uciec przed przecinkami, które masz w swoich elementach w ten sam sposób.

Powiązane problemy