我正在尝试写入CSV,但是当我尝试在写入CSV时进行迭代(使用for循环或通过writerows)时,我的输出不仅对列表进行了切片,而且对了字符串进行了切片清单。请帮忙!
代码:
导入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()
答案 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=""
,但保留了它)