gpt4 book ai didi

Python CSV 读取器/写入器处理引号 : How can I wrap row fields in quotes?(获取三重引号作为输出)

转载 作者:行者123 更新时间:2023-11-28 21:51:02 25 4
gpt4 key购买 nike

我对 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)

问题是,关于我标记“###SEE HERE### 的地方,我试过将未加引号的字段用引号括起来,如下所示:

data = [['"'+str(identity)+'"',row[0],'"'+row[1]+'"','"'+row[2]+'"','"'+row[3]+'"','"'+row[37]+'"']]

但这给我的输出看起来像这样,带有三重引号,这是 Not Acceptable ......像这样:

"""4""","JOHNSON, JOHN W.","""JOHN W. JOHNSON""","""TEC5681""","""检查技术员""","""机动车检查组"""

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

“姓名”、“姓名”、“姓名”、“姓名”等...

所以不知道为什么最后输出的时候只引用了一个字段。我要么需要所有字段都被引用,要么一个都不被引用。

我已经尝试过在读者和作者上使用和不使用“quotechar”,所有这些组合。

因此,如果您能告诉我如何保留原始文件中的原始引用或如何解决这个三重引用问题以便我可以手动重新格式化,那就太好了。

最佳答案

quotechar 仅指示作者应该使用什么字符来引用。您需要的是 quote=csv.QUOTE_ALL。像这样创建你的作家:

a = csv.writer(fp, quoting=csv.QUOTE_ALL)

quoting 默认为 csv.QUOTE_MINIMAL,这意味着它只会引用字段,如果它们包含分隔符,这就是它只引用的原因“约翰逊,约翰·J。”。

(请注意,我省略了 delimiter,因为它已经默认为 ',' 但当然,如果您愿意,显式定义它不会对您造成伤害。)

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

关于Python CSV 读取器/写入器处理引号 : How can I wrap row fields in quotes?(获取三重引号作为输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com