كيف يمكنني الانضمام إلى قائمة إلى سلسلة (التحذير)?

StackOverflow https://stackoverflow.com/questions/118458

  •  02-07-2019
  •  | 
  •  

سؤال

على غرار السابقة السؤال, كيف يمكنني الانضمام إلى قائمة من السلاسل في سلسلة هذه القيم الحصول على ونقلت نظيفة.شيء من هذا القبيل:

['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"\''
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top