我有一个字符串列表,我想写入csv文件.该列表list_results
看起来像
['False, 60, 40 ', 'True, 70, 30, ']
所以,我会尝试这样的事情:
with open('example1.csv', 'w') as result: writer = csv.writer(result, delimiter=",") writer.writerow( ('Correct?', 'Successes', 'Failures') ) writer.writerows(list_results)
不幸的是,数据不会写入三列.我发现:
['Correct?', 'Successes', 'Failures'] ['F', 'a', 'l', 's', 'e', ',', ' ', '6', '0', ',', ' ', '4', '0', ' '] ['T', 'r', 'u', 'e', ',', ' ', '7', '0', ',', ' ', '3', '0', ',', ' ']
如何正确格式化此行为以获取
['Correct?', 'Successes', 'Failures'] ['False', 60, 40] ['True', 70, 30]
格式最好%s %d %d
?
您正在使用writer.writerows()
与s
结尾。该方法需要一个lists列表,但是您传入了一个字符串列表。该writerows()
方法实质上是这样做的:
def writerows(self, rows): for row in rows: self.writerow(row)
其中每一行必须是一列列。字符串是单个字符的序列,因此这就是您所写的:单个字符由您选择的分隔符分隔。
您需要将字符串分成几列,不要自己包含逗号,writer对象的工作是包括以下内容:
with open('example1.csv', 'w') as result: writer = csv.writer(result, delimiter=",") writer.writerow(('Correct?', 'Successes', 'Failures')) for row in list_results: columns = [c.strip() for c in row.strip(', ').split(',')] writer.writerow(columns)
或使用生成器表达式,以便您可以继续使用writerows()
:
with open('example1.csv', 'w') as result: writer = csv.writer(result, delimiter=",") writer.writerow(('Correct?', 'Successes', 'Failures')) writer.writerows([c.strip() for c in r.strip(', ').split(',')] for r in list_results)
演示:
>>> import csv >>> list_results = ['False, 60, 40 ', 'True, 70, 30, '] >>> import csv >>> import sys >>> list_results = ['False, 60, 40 ', 'True, 70, 30, '] >>> writer = csv.writer(sys.stdout) >>> writer.writerow(('Correct?', 'Successes', 'Failures')) Correct?,Successes,Failures >>> for row in list_results: ... columns = [c.strip() for c in row.strip(', ').split(',')] ... writer.writerow(columns) ... False,60,40 True,70,30 >>> writer.writerows([c.strip() for c in r.strip(', ').split(',')] ... for r in list_results) False,60,40 True,70,30