前の質問に沿って、値がきれいに引用されるように、文字列のリストを文字列に結合するにはどうすればよいですか。何かのようなもの:
['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モジュールで使用して、後で文字列をリストに読み戻すことができます。
関連する注意事項として、Python の組み込みエンコーダーも文字列エスケープを行うことができます。
>>> 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"\''