写入CSV时,我的列表被切成薄片

时间:2018-08-12 17:15:46

标签: python loops csv iteration

我正在尝试写入CSV,但是当我尝试在写入CSV时进行迭代(使用for循环或通过writerows)时,我的输出不仅对列表进行了切片,而且对了字符串进行了切片清单。请帮忙!

enter image description here enter image description here enter image description here

代码:

导入csv

FileName= input("Enter the name of your master file here: ")
if len(FileName)<1: FileName="MasterCustomerList.csv"
FileOpen=open(FileName)
lst=list()
count=0
for lines in FileOpen:
    count=count+1
    lines=lines.rstrip()
    pieces=lines.split(',')
    if pieces[7]=="Yes":
        lst.append(pieces[2]+" "+pieces[1]+" "+pieces[0])
lst.sort()
for items in lst:
     print(items)


with open("CC_Customers.csv", "w", newline="") as DataFile:
    DataFileWriter = csv.writer(DataFile)
    DataFileWriter.writerows(lst)
DataFile.close()

2 个答案:

答案 0 :(得分:1)

csv.writerows需要一个列表列表,而不是一个字符串列表。由于字符串是可迭代的,因此在迭代时会得到一个字符。

由于输出实际上不是CSV,因此应使用CSV模块读取文件,而不要写入文件。

答案 1 :(得分:0)

请记住,在大多数情况下,字符串在Python中都被视为字符列表。 CSV文件包含N行和M列,因此writerows()的输入是列表列表,其中外部列表​​是N行,内部列表具有该行的M个元素(每列一个)。肮脏的快速修复方法是DataFileWriter.writerows([[elm] for elm in lst]),但是老实说,我宁愿只将每行写为普通文件。

这是您的代码,只需直接编写每一行即可清除:

import csv

file_name = input("Enter the name of your master file here: ")
if len(file_name) == 0:
    file_name = "MasterCustomerList.csv"

output = list()

with open(file_name) as file:
    for count, lines in enumerate(file):
        pieces = lines.rstrip().split(',')
        if pieces[7] == "Yes":
            output.append(pieces[2] + " " + pieces[1] + " " + pieces[0])

output.sort()

for items in output:
    print(items)

with open("CC_Customers.csv", "w", newline="") as file:
    file.writelines(output)

(不确定newline="",但保留了它)