gpt4 book ai didi

Python:csv.Dictreader 列上的额外逗号

转载 作者:行者123 更新时间:2023-12-01 08:12:30 25 4
gpt4 key购买 nike

我有这个读取函数,它使用 csv.DictReader 读取 csv 文件。 file.csv 以逗号分隔,可完整读取。但是,我的文件的这一部分有一列包含多个逗号。我的问题是,如何确保逗号算作列的一部分?我无法更改 csv 文件以满足标准。

文本文件:

ID,Name,University,Street,ZipCode,Country
12,Jon Snow,U of Winterfell,Winterfell #45,60434,Westeros
13,Steve Rogers,NYU,108, Chelsea St.,23333,United States
20,Peter Parker,Yale,34, Tribeca,32444,United States
34,Tyrion Lannister,U of Casterly Rock,Kings Landing #89, 43543,Westeros

所需的输出是这样的:

{'ID': '12', 'Name': 'Jon Snow', 'University': 'U of Winterfell', 'Street': 'Winterfell #45', 'ZipCode': '60434', 'Country': 'Westeros'}
{'ID': '13', 'Name': 'Steve Rogers', 'University': 'NYU', 'Street': '108, Chelsea St.', 'ZipCode': '23333', 'Country': 'United States'}
{'ID': '20', 'Name': 'Peter Parker', 'University': 'Yale', 'Street': '34, Tribeca', 'ZipCode': '32444', 'Country': 'United States'}
{'ID': '34', 'Name': 'Tyrion Lannister', 'University': 'U of Casterly Rock', 'Street': 'Kings Landing #89', 'ZipCode': '43543', 'Country': 'Westeros'}

正如您所见,由于数字的缘故,“街道”至少有两个逗号:

13,史蒂夫罗杰斯,纽约大学,108,切尔西街,23333,美国

20,彼得·帕克,耶鲁大学,34,翠贝卡,32444,美国

注意:大多数读取的列均由 str,str 分割,但在“Street”列下,后面跟着 str, str (逗号后面有一个额外的空格)。我希望这是有道理的。

我尝试寻找的选项是使用 re.split,但我不知道如何在我的读取文件上实现它。我在想re.split(r'(?!\s),(?!\s)',x[:-1])?如何确保我的文件中的格式将计入任何列的一部分?我不能使用 Pandas 。

我当前的输出现在看起来像这样:

{'ID': '12', 'Name': 'Jon Snow', 'University': 'U of Winterfell', 'Street': 'Winterfell #45', 'ZipCode': '60434', 'Country': 'Westeros'}
{'ID': '13', 'Name': 'Steve Rogers', 'University': 'NYU', 'Street': '108', 'ZipCode': 'Chelsea St.', 'Country': '23333', None: ['United States']}
{'ID': '20', 'Name': 'Peter Parker', 'University': 'Yale', 'Street': '34', 'ZipCode': 'Tribeca', 'Country': '32444', None: ['United States']}
{'ID': '34', 'Name': 'Tyrion Lannister', 'University': 'U of Casterly Rock', 'Street': 'Kings Landing #89', 'ZipCode': '43543', 'Country': 'Westeros'}

这是我的阅读功能:

import csv

list = []
with open('file.csv', mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=",", skipinitialspace=True)

for col in csv_reader:
list.append(dict(col))
print(dict(col))

最佳答案

如果文件不是有效的 CSV 格式,则无法使用 csv

您需要在普通线路上调用 re.split(),而不是在字典上。

list = []
with open('file.csv', mode='r') as csv_file:
keys = csv_file.readline().strip().split(',') # Read header line
for line in csv_file:
line = line.strip()
row = re.split(r'(?!\s),(?!\s)',line)
list.append(dict(zip(keys, row)))

关于Python:csv.Dictreader 列上的额外逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55154293/

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