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 回答