【问题标题】:Writing a list of strings of comma separated values into a CSV将逗号分隔值的字符串列表写入 CSV
【发布时间】:2018-02-08 17:41:43
【问题描述】:

我正在读取和解析平面文本文件中的行。我从该文件中获取某些值,执行一些小的格式化/转换步骤,然后输出一个逗号分隔的字符串。到目前为止,我只是将这些字符串直接写入一个新的 csv 文件。但是,现在我正在尝试利用 csv 库来更有效地处理它。

import csv

mydata = ["This, is, a, test, row", 
"This is, another test, row, my, dude",
"100, 200, 300, 400, 500"]

with open('test.csv', 'w') as target:
  writer = csv.writer(target, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
  writer.writerow(mydata)

结果如下:

"This, is, a, test, row","This is, another test, row, my, dude","100, 200, 300, 400, 500"

不是我真正想要的。而writer.writerows(mydata) 的结果是:

T,h,i,s,",", ,i,s,",", ,a,",", ,t,e,s,t,",", ,r,o,w
T,h,i,s, ,i,s,",", ,a,n,o,t,h,e,r, ,t,e,s,t,",", ,r,o,w,",", ,m,y,",", ,d,u,d,e
1,0,0,",", ,2,0,0,",", ,3,0,0,",", ,4,0,0,",", ,5,0,0

据我所知,csv.writer() 正在遍历字符串列表(第一个示例)或字符串(第二个示例)。我还尝试使用 for 循环遍历 mydata 中的每个项目,但这并没有帮助。对于我的一生,我无法找出使用编写器解析这些数据的最佳方法,以便列表中的每个项目对应于目标 csv 文件中的一行。将mydata 数据存储在完全不同的数据结构中是否有意义?处理这个问题的最佳方法是什么?

【问题讨论】:

  • 您在寻找什么?每个字符用逗号分隔?
  • writerows() 方法需要一个可迭代的作为输入。字符串是可迭代的,但猜猜它们迭代的是什么。这解释了您的第二个输出。

标签: python csv


【解决方案1】:

将我的数据做成二维列表,用户 writer.writerows()

import csv

mydata = [['This', 'is', 'a', 'test', 'row'], 
['This', 'is', 'another', 'test', 'row', 'my', 'dude'],
['100', '200', '300', '400', '500']]

with open('test.csv', 'w') as target:
  writer = csv.writer(target)
  writer.writerows(mydata)

writerow() 最适合用于编写单行,例如标题:

import csv

myheaders = ['Header1', 'Header2', 'Header3', 'Header4', 'Header5']
mydata = [['This', 'is', 'a', 'test', 'row'], 
['This', 'is', 'another', 'test', 'row', 'my', 'dude'],
['100', '200', '300', '400', '500']]

with open('test.csv', 'w') as target:
  writer = csv.writer(target)
  writer.writerow(myheaders)
  writer.writerows(mydata)

【讨论】:

    【解决方案2】:

    您需要将writerows 与列表一起使用,如下所示:

    import csv
    
    mydata = [["This, is, a, test, row"], 
    ["This is, another test, row, my, dude"],
    ["100, 200, 300, 400, 500"]]
    
    with open('test.csv', 'w') as target:
      writer = csv.writer(target, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
      writer.writerows(mydata)
    

    您当前的代码将每个字符串视为列列表,因此会出现意外输出。

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      相关资源
      最近更新 更多