假设我希望内置的python csv编写器忽略数组中的某些字符串值(输出中的逗号之间没有值)。例如,
my_list = [4, 'foo', 'close', 9, 0]
csv output => 4, ,'close', 9, 0
我会提供一个参数'foo',指定作者可以忽略它,这可能吗?如果是这样,有人可以帮助实施吗?
答案 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”语句从列表中删除您不想要的值,具体取决于您希望输出的样子。