假設我希望內置的python csv編寫器忽略數組中的某些字符串值(在輸出中逗號之間沒有值)。例如,csv編寫器忽略某些值
my_list = [4, 'foo', 'close', 9, 0]
csv output => 4, ,'close', 9, 0
我會提供一個參數'foo',指定被作者忽略,這可能嗎?如果是這樣,有人可以幫助實施?
假設我希望內置的python csv編寫器忽略數組中的某些字符串值(在輸出中逗號之間沒有值)。例如,csv編寫器忽略某些值
my_list = [4, 'foo', 'close', 9, 0]
csv output => 4, ,'close', 9, 0
我會提供一個參數'foo',指定被作者忽略,這可能嗎?如果是這樣,有人可以幫助實施?
>>> 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
你可以使用像這樣做的列表中替換:
map(lambda x : str(x) if x != 'foo' else ' ', my_list)
,只是做了join
創建輸出字符串:
','.join(map(lambda x : str(x) if x != 'foo' else ' ', my_list))
請注意,列表推導通常被認爲是比'map'更好的風格'lambda' – jamylak 2012-07-30 12:48:50
你可以試試這個:
ignored_strings = {'foo', 'ignored2', 'ignored3'}
my_list_filtered = [value if value not in ignored_strings else '' for value in my_list]
用空字符串替換要忽略的每個值。然後您可以使用csv編寫器打印出新列表。
您也可以在列表理解結束時使用'if'語句簡單地從列表中刪除不想要的值,具體取決於您希望輸出的樣子。
如果你打算使用這種方法,'ignored_strings'應該是一個集合 – mgilson 2012-07-30 12:47:33
你可以做這樣的事情,如果你有行的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])
請注意,這不適用於python 3.它會引發錯誤:'TypeError:'str'不支持緩衝區接口 – jamylak 2012-07-30 12:47:38
能否請您解決您的輸出?有一個流浪的引號,我不確定是否需要'','或'',''作爲分隔符 – jamylak 2012-07-30 12:35:10
固定;)(額外字符) – jab 2012-07-30 12:37:04
您真的想要字符串的表示法(''close '')而不只是'close'? – jamylak 2012-07-30 12:38:00