我完全被难住了。以下是我的 .csv 文件的内容:
[('54th St. & Ray Rd., Chandler,"Chandler, AZ",AZ,Yes,3/29/2022,6/9/2022,72,1,9,10,17,0.5882,
-0.8000,0.1000,No')]
当我引入 .csv 数据时,我使用以下方法挑选出一堆我想要的数据并创建另一个列表:
self._store_data = list()
with open(filename, "r") as file_open:
csvreader = csv.reader(file_open, delimiter=';')
listed = [items for items in csvreader]
listed.pop(0)
print(listed)
new_list = []
for item in listed:
new_list.append(item[0].split(","))
#print(new_list)
#print(len(new_list))
best_list = list(map(itemgetter(0, 1, 3, 4, 8, 9, 15),
new_list))
for index, (a, b, c, d, e, f, g) in enumerate(best_list):
best_list[index] = (str(a), str(b), str(c), str(d), int(e),
int(f), str(g))
self._store_data = best_list
我基本上能够将其变成一个不错的元组列表,然后进行操作,但是因为我在 .split(",") 中用逗号分隔每个项目,所以我创建了额外的索引不想。
所以上面的内容变成了这样:
['54th St. & Ray Rd.', ' Chandler', '"Chandler', ' AZ"', 'AZ', 'Yes', '3/29/2022', '6/9/2022', '72', '1', '9', '10', '17', '0.5882', '-0.8000', '0.1000', 'No']
看看“Chandler”如何从引用的项目中被拉出,现在占据它自己的索引,而且 AZ 现在占据两个索引,使得该行的索引总数为 0-16 而不是 0-14。
我需要找到一种方法从 .csv 文件创建新列表,以便将整个引用文本视为一个字符串并防止 .split(",") 到达内部。
或者,如果有其他方法可以在不使用 .split() 的情况下完成此操作,非常高兴向您了解
我上面的代码创建了这个:
('54th St. & Ray Rd.', ' Chandler', ' AZ"', 'AZ', 72, 1, '0.1000')
第一个 AZ 实际上是在 Chandler 的引文中(例如“Chandler, AZ”),但它被 .split(",") 打破了
我不确定你如何得到任何结果,因为你的代码使用
;
作为分隔符,然后使用 listed.pop(0)
这应该会导致一个空列表。qoutechar
默认为 '"'
,因此请尝试不使用分隔符。
from pprint import pp
import csv, io
csv_file = '''\
54th St. & Ray Rd., Chandler,"Chandler, AZ",AZ,Yes,3/29/2022,6/9/2022,72,1,9,10,17,0.5882,-0.8000,0.1000,No
'''
with io.StringIO(csv_file, newline='') as file:
listed = [list(map(str.strip, row)) for row in csv.reader(file)]
for row in listed: pp(row, compact=True)
给出了正确的列表:
['54th St. & Ray Rd.', 'Chandler', 'Chandler, AZ', 'AZ', 'Yes', '3/29/2022',
'6/9/2022', '72', '1', '9', '10', '17', '0.5882', '-0.8000', '0.1000', 'No']