2008-09-23 20 views
6

मेरे पिछले question की लाइनों के साथ, मैं तारों की सूची में स्ट्रिंग में कैसे शामिल हो सकता हूं जैसे मूल्यों को स्पष्ट रूप से उद्धृत किया जाता है। कुछ की तरह:मैं एक स्ट्रिंग (चेतावनी) में सूची में कैसे शामिल हो सकता हूं?

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

में:

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

मुझे लगता है कि सीएसवी मॉड्यूल खेलने में यहाँ आ जाएगा, लेकिन मुझे यकीन है कि कैसे उत्पादन मैं चाहता हूँ प्राप्त करने के लिए नहीं कर रहा हूँ।

उत्तर

7

csv मॉड्यूल का उपयोग करके आप इस तरह से कर सकते हैं: आप एक स्ट्रिंग की जरूरत है सिर्फ एक फ़ाइल के रूप में StringIO उदाहरण का उपयोग

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

:

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

उत्पादन: a,"one ""two"" three","foo, bar","both""'"

csv एक तरह से लिखेंगे जो बाद में पढ़ सकता है। आप एक dialect को परिभाषित करते हुए-ट्यून कर सकते हैं इसके उत्पादन, बस quotechar, escapechar, आदि निर्धारित करते हैं, के रूप में की जरूरत:

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

उत्पादन: a,one \"two\" three,"foo, bar",both\"'

एक ही बोली सीएसवी मॉड्यूल के साथ इस्तेमाल किया जा सकता को पढ़ने के लिए एक सूची में बाद में स्ट्रिंग।

1

यहां थोड़ा आसान विकल्प है।

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

हमें केवल उस मूल्य को उद्धृत करने की आवश्यकता है जिसमें अल्पविराम या उद्धरण हो।

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

एक संबंधित नोट पर, पायथन के builtin encoders भी स्ट्रिंग एस्केपिंग कर सकते हैं:

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

+1 इस हालांकि, अपने आप में, मैं के लिए क्या देख रहा था नहीं है, मैं इस बहुत उपयोगी किया जा रहा है देख सकते हैं किसी बिंदु पर मेरे लिए। –