Python:导出为CSV时删除额外引号

时间:2017-07-28 17:59:29

标签: python python-2.7 csv export-to-csv

我正在尝试将列表导出到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)

但我得到的只是:

_csv.Error:需要转义,但没有escapechar设置

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

1 个答案:

答案 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的工作。