5

前の質問に沿って、値がきれいに引用されるように、文字列のリストを文字列に結合するにはどうすればよいですか。何かのようなもの:

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

の中へ:

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

ここでcsvモジュールが機能するのではないかと思いますが、必要な出力を取得する方法がわかりません。

4

3 に答える 3

7

モジュールを使用すると、次の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て、出力を微調整できます。quotecharescapechar

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モジュールで使用して、後で文字列をリストに読み戻すことができます。

于 2008-09-23T00:43:42.593 に答える
2

関連する注意事項として、Python の組み込みエンコーダーも文字列エスケープを行うことができます。

>>> print "that's interesting".encode('string_escape')
that\'s interesting
于 2008-09-23T15:29:04.197 に答える
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"\''
于 2008-09-23T01:26:34.877 に答える