csv writer忽略某些值

时间:2012-07-30 12:30:27

标签: python arrays list csv

假设我希望内置的python csv编写器忽略数组中的某些字符串值(输出中的逗号之间没有值)。例如,

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

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

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

4 个答案:

答案 0 :(得分:2)

如果你要写一个2D行列表,你可以这样做:

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])

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用类似的内容在列表中进行替换:

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

只需执行join即可创建输出字符串:

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

答案 3 :(得分:0)

你可以试试这个:

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

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

用空字符串替换要忽略的每个值。然后,您可以使用csv writer打印出新列表。

您还可以使用列表推导结尾处的“if”语句从列表中删除您不想要的值,具体取决于您希望输出的样子。