2008-09-23 18 views
6

Zgodnie z moją poprzednią wersją question, jak mogę dołączyć listę ciągów do łańcucha tak, że wartości są cytowane czysto. Coś jak:Jak mogę dołączyć do listy w ciągu znaków (zastrzeżenia)?

['a', 'one "two" three', 'foo, bar', """both"'"""] 

do:

a, 'one "two" three', "foo, bar", "both\"'" 

Podejrzewam, że moduł csv będzie wchodzić w grę tutaj, ale nie jestem pewien, w jaki sposób uzyskać dane wyjściowe chcę.

Odpowiedz

7

Korzystanie z modułu csv można zrobić w ten sposób:

import csv 
writer = csv.writer(open("some.csv", "wb")) 
writer.writerow(the_list) 

Jeśli potrzebujesz ciąg wystarczy użyć StringIO instancji jako plik:

f = StringIO.StringIO() 
writer = csv.writer(f) 
writer.writerow(the_list) 
print f.getvalue() 

Wyjście: a,"one ""two"" three","foo, bar","both""'"

csv napisze w sposób, który będzie mógł odczytać później. można dostroić swoje wyjście poprzez zdefiniowanie dialect, wystarczy ustawić quotechar, escapechar, itp, jak potrzebne:

class SomeDialect(csv.excel): 
    delimiter = ',' 
    quotechar = '"' 
    escapechar = "\\" 
    doublequote = False 
    lineterminator = '\n' 
    quoting = csv.QUOTE_MINIMAL 

f = cStringIO.StringIO() 
writer = csv.writer(f, dialect=SomeDialect) 
writer.writerow(the_list) 
print f.getvalue() 

Wyjście: a,one \"two\" three,"foo, bar",both\"'

Ten sam dialekt może być używany z modułem csv czytać łańcuch z powrotem do listy.

1

Oto nieco prostsza alternatywa.

def quote(s): 
    if "'" in s or '"' in s or "," in str(s): 
     return repr(s) 
    return s 

Musimy podać tylko wartość, która może zawierać przecinki lub cudzysłowy.

>>> x= ['a', 'one "two" three', 'foo, bar', 'both"\''] 
>>> print ", ".join(map(quote,x)) 
a, 'one "two" three', 'foo, bar', 'both"\'' 
2

Na powiązana uwaga Pythona builtin encoders można również zrobić ciąg cytowanie:

>>> print "that's interesting".encode('string_escape') 
that\'s interesting 
+0

+1 Chociaż ta sama w sobie nie jest to, czego szukał, widzę co jest bardzo pomocne do mnie w pewnym momencie. –

Powiązane problemy