我正在尝试将列表导出到csv,但它不断给我额外的报价。这是我尝试导出行时的样子:
我希望它看起来像:
这是我的代码:
import csv
def writeToCSV(fileName,writeRow):
f = open(fileName, 'ab')
outputFile = csv.writer(f)
outputFile.writerow(writeRow)
def csv_to_list_NoHeaders(user_File):
listOfFruits = []
with open(user_File) as output:
reader = csv.reader(output)
next(reader, None)
for each_line in output:
listOfFruits.append(each_line)
return listOfFruits
fileName1 = 'yesterdayfruits.csv'
fileName2 = 'todaysfruits.csv'
fileOutput = 'fruitsMissing.csv'
todaysfruits = csv_to_list_NoHeaders('todaysfruits.csv')
yesterdayfruits1 = csv_to_list_NoHeaders('yesterdayfruits.csv')
yesterdayfruits2 = []
missingFruits = []
for yesterday in range(len(yesterdayfruits1) - 1, -1, -1):
for today in range(0, len(todaysfruits), 1):
if (yesterdayfruits1[yesterday].split(',')[0].strip() ==
todaysfruits[today].split(',')[0].strip()):
yesterdayfruits2.append(yesterdayfruits1[yesterday])
for x in yesterdayfruits1:
if x in yesterdayfruits2:
pass
else:
missingFruits.append(x)
for y in missingFruits:
writeToCSV('fruitsMissing.csv', [y.strip()])
我尝试过:
outputFile = csv.writer(f,quoting=csv.QUOTE_NONE)
但我得到的只是:
yesterdayfruits.csv文件包含:
Fruit Name, Fruit Color
apple, red
orange, orange
banana, yellow
watermelon, green
strawberry, red
todaysfruits.csv文件包含:
Fruit Name, Fruit Color
apple, red
orange, orange
banana, yellow
watermelon, green
答案 0 :(得分:2)
csv
函数writerow
期望获得字符串列表。如果希望输出行具有两个值,则需要将其传递给2个列表。但是你的代码传递了一个包含单个字符串的1列表,其中包含逗号。
该1列表被解释为具有包含嵌入式逗号的单个值的行。如果某个值有嵌入的逗号,writerow
必须在其周围加上引号,否则读取该文件的程序会将其解释为两个值,并且因为writerow
得到一个列表,所以知道行中只有一个值。
这就是你得到报价的原因。当你这样做时:
outputFile = csv.writer(f,quoting=csv.QUOTE_NONE)
csv
抱怨它必须以某种方式表明逗号是数据的一部分,但你有(a)强制引用和(b)没有提供其它方法来逃避逗号。
所以,你需要修改这一行:
writeToCSV('fruitsMissing.csv', [y.strip()])
y
目前是包含"strawberry, red"
的字符串。而是安排它成为一个如下所示的列表:["strawberry", "red"]
并像这样调用你的函数:
writeToCSV('fruitsMissing.csv', y)
基本上,你的代码工作太辛苦了。它正在设置一行文本,其中已有逗号。这是csv
的工作。