当字段包含逗号时按逗号拆分字符串

1 投票
1 回答
713 浏览
提问于 2025-04-18 19:58

考虑一下这个字符串:

'538.48,0.29,"533.59 - 540.00","AZO",102482,"+0.05%","N/A",0.00,535.09,"AutoZone, Inc. Co",538.77,"N/A"'

我需要把它分割成一个列表,像下面这样:

[538.48, 0.29, "533.59 - 540.00", "AZO", 102482, "+0.05%" , "N/A", 0.00, 535.09, "AutoZone, Inc. Co", 538.77, "N/A"]

问题是我不能用 list.split(','),因为第十个字段里面有一个逗号。那么,问题是当某些字段可能包含逗号时,如何最好地把原始字符串分割成一个列表呢?

1 个回答

2

使用csv模块,而不是自己去拆分数据,这个模块可以自动处理带引号的值,包括那些里面还包含分隔符的引号值,非常方便:

>>> import csv
>>> from pprint import pprint
>>> data = '538.48,0.29,"533.59 - 540.00","AZO",102482,"+0.05%","N/A",0.00,535.09,"AutoZone, Inc. Co",538.77,"N/A"'
>>> reader = csv.reader(data.splitlines())
>>> pprint(next(reader))
['538.48',
 '0.29',
 '533.59 - 540.00',
 'AZO',
 '102482',
 '+0.05%',
 'N/A',
 '0.00',
 '535.09',
 'AutoZone, Inc. Co',
 '538.77',
 'N/A']

注意一下'AutoZone, Inc. Co'这一列的值。

如果你是从文件中读取这些数据,直接把文件对象传给csv.reader(),而不是手动传递字符串序列。

你甚至可以通过设置quoting=csv.QUOTE_NONNUMERIC,让那些没有引号的数字值被当作浮点数来处理:

>>> reader = csv.reader(data.splitlines(), quoting=csv.QUOTE_NONNUMERIC)
>>> pprint(next(reader))
[538.48,
 0.29,
 '533.59 - 540.00',
 'AZO',
 102482.0,
 '+0.05%',
 'N/A',
 0.0,
 535.09,
 'AutoZone, Inc. Co',
 538.77,
 'N/A']

撰写回答