Python:导出为 CSV 时删除多余的引号

Python: Remove Extra Quotes when Exporting to CSV

我正在尝试将列表导出到 csv,但它一直给我额外的引号。这是我尝试导出行时的样子:

"strawberry, red"

我想要的样子:

草莓红

这是我的代码:

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

csv 函数 writerow 期望得到一个字符串列表。如果您希望输出行有两个值,则需要向其传递一个 2 列表。但是您的代码向它传递了一个 1 列表,其中包含一个带有逗号的字符串。

该 1-list 被解释为具有包含嵌入逗号的单个值的行。如果一个值有一个嵌入的逗号,writerow 必须在它周围加上引号,否则读取文件的程序会将它解释为两个值,并且因为 writerow 得到一个 1-列表,它知道该行中只有一个值。

这就是您获得报价的原因。当你这样做时:

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