在 Python 中,如何从 .csv 文件创建列表,以避免引号内出现逗号,同时使用逗号分隔

问题描述 投票:0回答:1

我完全被难住了。以下是我的 .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(",") 打破了

python csv methods list-comprehension
1个回答
0
投票

我不确定你如何得到任何结果,因为你的代码使用

;
作为分隔符,然后使用
listed.pop(0)
这应该会导致一个空列表。
对于 csv,
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']
© www.soinside.com 2019 - 2024. All rights reserved.