2008-09-23 41 views
6

Dọc theo các dòng của question trước đây của tôi, làm cách nào tôi có thể tham gia danh sách chuỗi thành chuỗi để giá trị được trích dẫn rõ ràng. Một cái gì đó như:Làm thế nào tôi có thể tham gia một danh sách thành một chuỗi (báo trước)?

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

thành:

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

Tôi nghi ngờ rằng các mô-đun csv sẽ đi vào chơi ở đây, nhưng tôi không chắc chắn làm thế nào để nhận được đầu ra tôi muốn.

Trả lời

7

Sử dụng các module csv bạn có thể làm theo cách đó:

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

Nếu bạn cần một chuỗi chỉ cần sử dụng StringIO dụ dưới dạng tệp:

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

Sản lượng: a,"one ""two"" three","foo, bar","both""'"

csv sẽ viết theo cách nó có thể đọc lại sau. Bạn có thể tinh chỉnh sản lượng của nó bằng cách định nghĩa một dialect, chỉ cần đặt quotechar, escapechar, vv, khi cần thiết:

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() 

Sản lượng: a,one \"two\" three,"foo, bar",both\"'

Cùng phương ngữ có thể được sử dụng với mô-đun csv đọc chuỗi trở lại sau đó vào danh sách.

1

Đây là giải pháp thay thế đơn giản hơn một chút.

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

Chúng tôi chỉ cần báo giá trị có thể có dấu phẩy hoặc dấu ngoặc kép.

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

Trên một lưu ý liên quan, Python của builtin encoders cũng có thể làm chuỗi thoát:

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

+1 mặc dù điều này, bản thân nó, chứ không phải là những gì tôi đang tìm kiếm, tôi có thể thấy điều này là rất hữu ích với tôi vào một thời điểm nào đó. –

Các vấn đề liên quan