1

假设我希望内置的 python csv writer 忽略数组中的某些字符串值(在输出中的逗号之间不放置任何值)。例如,

my_list = [4, 'foo', 'close', 9, 0]

csv output => 4, ,'close', 9, 0

我会提供一个参数'foo'来指定被作者忽略,这可能吗?如果是这样,有人可以帮助实施吗?

4

4 回答 4

2

如果你有一个二维的行列表要写,你可以这样做:

lines = [[4, 'foo', 'close', 9, 0], [5, 'foo', 'close', 9, 0]]

import csv
with open("outfile.csv", "wb") as outf:
    w = csv.writer(outf)
    for line in lines:
        w.writerow(["" if e == "foo" else e for e in line])
于 2012-07-30T12:39:46.450 回答
1
>>> import csv
>>> my_list = [4, 'foo', 'close', 9, 0]
>>> with open('test.csv', 'w') as fout:
        w = csv.writer(fout, delimiter=',')
        w.writerow([x if x != 'foo' else ' ' for x in my_list])

>>> print open('test.csv').read()
4, ,close,9,0
于 2012-07-30T12:39:28.480 回答
0

您可以使用类似这样的方法在列表中进行替换:

map(lambda x : str(x) if x != 'foo' else ' ', my_list)

并且只需执行 ajoin创建输出字符串:

','.join(map(lambda x : str(x) if x != 'foo' else ' ', my_list))
于 2012-07-30T12:38:10.567 回答
0

你可以试试这个:

ignored_strings = {'foo', 'ignored2', 'ignored3'}

my_list_filtered = [value if value not in ignored_strings else '' for value in my_list]

这会将您要忽略的每个值替换为空字符串。然后,您可以使用 csv 编写器打印出新列表。

您还可以使用列表推导末尾的“if”语句从列表中删除不需要的值,具体取决于您希望输出的外观。

于 2012-07-30T12:38:46.673 回答