Python读取CSV文件时如何避免拆分引号内的逗号?
正确读取含引号内逗号的CSV内容的方法
方案一:用Python内置csv模块(最稳妥)
Python自带的csv模块原生支持解析带引号的CSV内容,会自动将引号包裹的含逗号内容视为整体,不用自己处理拆分逻辑:
读取CSV文件示例
import csv # 读取本地CSV文件 with open('your_file.csv', 'r', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: # row 是处理后的列表,引号内的"Chandler, AZ"会作为单个元素 print(row)
处理CSV格式字符串示例
如果是处理内存中的CSV格式字符串,也可以用csv.StringIO:
import csv from io import StringIO csv_str = '''Name,City,Age Alice,"New York, NY",30 Bob,"Chandler, AZ",28''' with StringIO(csv_str) as f: reader = csv.reader(f) for row in reader: print(row) # 输出结果: # ['Name', 'City', 'Age'] # ['Alice', 'New York, NY', '30'] # ['Bob', 'Chandler, AZ', '28']
方案二:手动实现拆分逻辑(仅应急用,不推荐)
如果没法用csv模块,可手动判断引号状态来拆分,注意这种方式容易遗漏边缘情况(比如嵌套引号、转义引号):
def split_csv_line(line): result = [] current = [] in_quotes = False for char in line: if char == '"': in_quotes = not in_quotes elif char == ',' and not in_quotes: result.append(''.join(current).strip()) current = [] else: current.append(char) # 添加最后一个元素 result.append(''.join(current).strip()) return result # 测试 line = 'Bob,"Chandler, AZ",28' print(split_csv_line(line)) # 输出 ['Bob', 'Chandler, AZ', '28']
注意:手动实现无法覆盖所有CSV规范场景(比如
"He said ""Hello"""这种转义引号),优先用内置csv模块。
内容的提问来源于stack exchange,提问作者BBD
相关产品推荐
相关产品推荐

