Python CSV解析问题:忽略大括号内的逗号分隔符
Pandas读取含JSON格式列的CSV文件解决方案
方法1:借助Python标准库csv预处理后转DataFrame
标准库csv对带特殊字符的字段处理更精准,尤其是当JSON字段被引号包裹时,它会自动忽略字段内部的逗号。步骤如下:
import csv import pandas as pd data = [] with open(file_name, 'r', encoding='utf-8') as f: reader = csv.reader(f) header = next(reader) # 读取表头 for row in reader: # csv.reader已自动完整读取含JSON的第3列(索引从0开始为第2列) data.append(row) # 转换为DataFrame df = pd.DataFrame(data[1:], columns=data[0])
如果目标列的JSON未被引号包裹,可自定义逻辑识别大括号包裹的字段:
import csv import pandas as pd def parse_custom_row(row_str): # 拆分行时,保留大括号内的内容不拆分 parts = [] current = [] brace_count = 0 for char in row_str: if char == ',' and brace_count == 0: parts.append(''.join(current)) current = [] else: current.append(char) if char == '{': brace_count += 1 elif char == '}': brace_count -= 1 parts.append(''.join(current)) return parts data = [] with open(file_name, 'r', encoding='utf-8') as f: header = parse_custom_row(f.readline().strip()) for line in f: data.append(parse_custom_row(line.strip())) df = pd.DataFrame(data, columns=header)
方法2:优化正则分隔符适配嵌套大括号
你之前使用的正则无法处理嵌套大括号场景,可替换为更健壮的规则,匹配不在未闭合大括号内的逗号:
import pandas as pd df = pd.read_csv( file_name, delimiter=r',(?=(?:[^{}]*{[^{}]*})*[^{}]*$)', engine='python', index_col=False )
这个正则会检查逗号后续内容的大括号是否成对闭合,确保不会拆分JSON内部的逗号。
方法3:指定字段引用规则
如果CSV中含JSON的列是用双引号包裹的,直接指定引用参数即可:
import pandas as pd import csv df = pd.read_csv( file_name, quotechar='"', quoting=csv.QUOTE_NONNUMERIC, # 或csv.QUOTE_ALL,根据实际CSV格式选择 index_col=False )
内容的提问来源于stack exchange,提问作者Ashgonline
相关产品推荐
相关产品推荐

