当前位置:  开发笔记 > 编程语言 > 正文

csv:writer.writerows()拆分我的字符串输入

如何解决《csv:writer.writerows()拆分我的字符串输入》经验,为你挑选了1个好方法。

我有一个字符串列表,我想写入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



1> Martijn Piet..:

您正在使用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

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有