كيف يمكنني الانضمام إلى قائمة إلى سلسلة (التحذير)?
سؤال
على غرار السابقة السؤال, كيف يمكنني الانضمام إلى قائمة من السلاسل في سلسلة هذه القيم الحصول على ونقلت نظيفة.شيء من هذا القبيل:
['a', 'one "two" three', 'foo, bar', """both"'"""]
إلى:
a, 'one "two" three', "foo, bar", "both\"'"
وأظن أن csv وحدة تدخل حيز اللعب هنا, ولكن أنا لست متأكدا من كيفية الحصول على إخراج أريد.
المحلول
باستخدام csv
الوحدة يمكنك القيام بهذه الطريقة:
import csv
writer = csv.writer(open("some.csv", "wb"))
writer.writerow(the_list)
إذا كنت بحاجة إلى سلسلة فقط استخدام StringIO
سبيل المثال كملف:
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\"'
نفس اللهجة يمكن استخدامها مع csv وحدة لقراءة السلسلة مرة أخرى في وقت لاحق إلى قائمة.
نصائح أخرى
على صعيد ذات صلة, بايثون مدمج الترميز يمكن أن تفعل أيضا سلسلة الهروب:
>>> print "that's interesting".encode('string_escape')
that\'s interesting
هنا قليلا أبسط البديلة.
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"\''