如何使用Python移除CSV文件中的双引号并拆分引号内的字段
解决CSV文件移除双引号并拆分引号内字段的问题
嘿,作为Python新手遇到这个CSV解析问题太正常了,我来帮你搞定它!
先明确你的需求:把类似 1 ; "2;3" ; "4;5" ; 6 的行转换成 1,2,3,4,5,6(如果想要带空格的格式,后面我也会提怎么调整)。
你的原代码问题出在 quoting=csv.QUOTE_NONE 和 escapechar='"' 的配置上——这会让csv模块完全忽略双引号的字段包裹作用,没法正确识别引号内的分号是字段内容而非分隔符,自然达不到预期效果。
正确的解决方案
我们可以分两步处理:先让csv模块正确读取带引号的字段,再拆分字段内的分号,最后合并成目标格式。
完整代码如下:
import csv with open('file.csv', 'r') as csv_file: # 配置csv.reader:用分号做分隔符,跳过字段前的空格,让模块自动处理双引号包裹的字段 csv_reader = csv.reader(csv_file, delimiter=';', skipinitialspace=True) next(csv_reader) # 跳过表头行 output = [] for line in csv_reader: # 把每个字段拆分成单个元素(有分号就拆分,没有直接保留) flattened_fields = [] for field in line: if ';' in field: flattened_fields.extend(field.split(';')) else: flattened_fields.append(field) # 把扁平化后的列表转为逗号分隔的字符串(想要带空格就把','改成', ') output.append(','.join(flattened_fields)) # 打印结果(如果有多行的话会逐行输出) print('\n'.join(output))
代码解释
- 正确读取CSV:去掉了错误的
quoting和escapechar参数,csv模块默认会识别双引号作为字段的包裹标记,这样引号内的;会被当作字段内容,读取后每一行会得到['1', '2;3', '4;5', '6']这样的列表(双引号会被自动移除)。 - 拆分字段内的分号:遍历每个字段,检查是否包含
;,如果有就拆分并把拆分后的元素加入新列表,否则直接添加原字段。 - 生成目标格式:用
','.join()把所有元素拼接成逗号分隔的字符串,要是你想要示例里带空格的格式,把代码里的','改成', '就行。
测试你的示例行,这段代码会输出 1,2,3,4,5,6(或带空格的版本),完全符合你的需求。
内容的提问来源于stack exchange,提问作者marshmallow
相关产品推荐
相关产品推荐

