Python 将逗号分隔值的字符串列表写入CSV

Python 将逗号分隔值的字符串列表写入CSV,python,csv,Python,Csv,我正在读取和解析平面文本文件中的行。我从该文件中获取某些值,执行一些小的格式化/转换步骤,并输出一个逗号分隔的字符串。到目前为止,我只是将这些字符串直接写入一个新的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.cs

我正在读取和解析平面文本文件中的行。我从该文件中获取某些值,执行一些小的格式化/转换步骤,并输出一个逗号分隔的字符串。到目前为止,我只是将这些字符串直接写入一个新的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"
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
不是我想要的。然而,
writer.writerows(mydata)
导致:

"This, is, a, test, row","This is, another test, row, my, dude","100, 200, 300, 400, 500"
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
中的每个项目,但这对eiter没有帮助。就我的一生而言,我无法找到使用writer解析这些数据的最佳方法,以便列表中的每个项目都对应于目标csv文件中的一行。将
mydata
数据存储在完全不同的数据结构中有意义吗?处理此问题的最佳方法是什么?

将我的数据设置为二维列表,然后使用user writer.writerows()

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)

将我的数据设置为二维列表,并使用user writer.writerows()

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)

您需要将
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)

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

您需要将
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)

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

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