Python CSV读取器/写入器处理引号:如何将行字段包装在引号中?(将三重引号作为输出)

Mr.*_*. A 2 python csv

我在python中的csv阅读器和编写器有问题.每当我尝试获取一个CSV文件并将列数从大约37个减少到6个时,这就是我得到的那种输出.一行示例:

0,"JOHNSON,JOHN J.",JOHN J. JOHNSON,TECH879,检验技师,汽车检测装置

请注意引用第二个字段.这是我在文本编辑器中查看时看到的内容.我想要引用所有字段.这儿存在一个问题.首先,我的代码,它的一个例子:

import os
import csv
alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
with open(os.getcwd()+'/dl1/filepfr062220155.csv','w') as fp:
identity = 0
for i in alpha:
    csvholder = open(os.getcwd()+'/dl1/pfr/'+i+'.csv','rb')
    spamreader = csv.reader(csvholder, delimiter=',')
    for row in spamreader:
        if 'Sort Name' in row[0]:
                pass
        else:
                ###SEE HERE###
                data = [[str(identity),row[0],row[1],row[2],row[3],row[37]]]
                identity+=1
                a = csv.writer(fp,delimiter=',',quotechar='"')
                a.writerows(data)
Run Code Online (Sandbox Code Playgroud)

问题是,关于我在哪里标记了"### SEE HERE ###,我试过在引号中包含未引用的字段,如下所示:

data = [['"'+str(identity)+'"',row[0],'"'+row[1]+'"','"'+row[2]+'"','"'+row[3]+'"','"'+row[37]+'"']]
Run Code Online (Sandbox Code Playgroud)

但是这给了我看起来像这样的输出,带有三引号,这是不可接受的......就像这样:

"""4""","JOHNSON,JOHN W.","""JOHN W. JOHNSON""","""TEC5681""",""""检查技师""",""""汽车检查单元"""

这些行的原始形式是这样的:

"NAME","NAME","NAME","NAME"等......

所以我不知道为什么在最终输出中只引用了一个字段.我要么引用所有引用的字段,要么引用它们.

我已经尝试过在阅读器和作者上使用和不使用"quotechar",所有这些组合.

因此,如果您可以告诉我如何保留原始文件中的原始引用或如何解决此三重引用问题,以便我可以手动重新格式化,那将是很好的.

Der*_*nes 5

quotechar仅表示作者应该使用什么字符进行引用.这quote=csv.QUOTE_ALL就是你需要的.像这样创建你的作家:

a = csv.writer(fp, quoting=csv.QUOTE_ALL)
Run Code Online (Sandbox Code Playgroud)

quoting默认为csv.QUOTE_MINIMAL,意味着它只会引用包含分隔符的字段,这就是为什么它只引用"JOHNSON,JOHN J.".

(注意我遗漏了,delimiter因为它已经默认,','但是如果你愿意,当然不会明确地定义它.)

quoting和其他方言参数是关键字参数csv.writer,并在csv模块的Python文档中根据第13.1.2节进行了描述.