2

次の Python コード行

values = ", ".join(["\"%s\"" % x for x in row])

「row」内の要素のリストを取得して、カンマ区切りの文字列「values」を作成します。各値は二重引用符で囲みます。例: 「New York」、「5」、「」、「3.2」

ただし、結果は mysqldump ファイルの一部になるため、空のフィールド ("") は NULL (二重引用符なし) にする必要があります。

したがって、x が空 ("") であるかどうかがチェックされるようにその式を変更する方法を学びたいと思います。その場合、値の文字列に NULL を追加する必要があります。

ありがとう

4

3 に答える 3

7
values = ", ".join('"%s"' % x if x else 'NULL' for x in row)

例えば:

>>> row = ["foo", "", "bar"]
>>> values = ", ".join('"%s"' % x if x else 'NULL' for x in row)
>>> values
'"foo", NULL, "bar"'

もちろん、リスト内包表記をジェネレーター式に変更する方が良いことを指摘してくれた DSM に感謝します。これにより、直後に破棄されるリストを作成する必要がなくなるため、高速化されます。

于 2012-09-29T14:44:29.747 に答える
4
values = ", ".join(["NULL" if x == "" else "\"%s\"" % x for x in row])
于 2012-09-29T14:45:53.453 に答える
0

これをもう少し堅牢にするために、csvモジュールを利用して埋め込みフィールドと文字列区切り記号を処理します...(アドホックな例にすぎません)

from StringIO import StringIO
import csv

csvrec = StringIO()
csvout = csv.writer(csvrec, quoting=csv.QUOTE_ALL)
items = [1, 'hello, there, how are you?', 3.2, 'it\'s a "cat" I say!', '', '']
csvout.writerow([col or '\t' for col in items]) # maybe col != '' ?
print csvrec.getvalue().replace('"\t"', 'NULL').strip()
# "1","hello, there, how are you?","3.2","it's a ""cat"" I say!",NULL,NULL
于 2012-09-29T15:22:55.837 に答える