使用Pandas读取含双引号的CSV文件时列解析异常的解决方法
处理含双引号的CSV解析问题
首先,不建议手动用正则或自定义分隔符处理,CSV有明确的规范(RFC 4180),其中就包含“用双引号包裹含逗号/特殊字符的字段”的场景,专业的CSV解析库会自动处理这类情况,比自己写正则靠谱得多。
推荐方案:使用标准CSV解析库
以下是几种主流语言的实现示例:
Python
Python自带csv模块,无需额外安装,直接处理:
import csv with open('your_file.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row) # 每个row是列表,对应每一列内容,双引号会被自动去除
比如你的第一行数据,会被解析成:['3', 'Gunnar Nielsen Aaby', 'M', '24', 'NA', 'NA', 'Denmark', 'DEN']
JavaScript(Node.js)
可以用csv-parser(先执行npm install csv-parser安装):
const fs = require('fs'); const csv = require('csv-parser'); const results = []; fs.createReadStream('your_file.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log(results); // 解析后的对象数组,自动处理双引号和特殊字符 });
Java
使用OpenCSV库(需通过Maven引入依赖):
import com.opencsv.CSVReader; import java.io.FileReader; import java.util.List; public class CSVParser { public static void main(String[] args) throws Exception { CSVReader reader = new CSVReader(new FileReader("your_file.csv")); List<String[]> rows = reader.readAll(); for (String[] row : rows) { for (String col : row) { System.out.print(col + "\t"); } System.out.println(); } reader.close(); } }
手动处理方案(仅作应急,不推荐)
如果实在不想用库,可尝试两种思路:
思路1:全局移除双引号
仅适用于双引号仅用来包裹字段的场景(若字段内本身含双引号,会破坏数据):
with open('your_file.csv', 'r') as f: for line in f: cleaned_line = line.replace('"', '') columns = cleaned_line.strip().split(',') print(columns)
思路2:用正则匹配字段(复杂场景易出错)
用正则优先匹配双引号内的内容,再匹配普通字段:
import re pattern = re.compile(r'(?<=")[^"]+(?=")|[^,]+') with open('your_file.csv', 'r') as f: for line in f: columns = pattern.findall(line.strip()) print(columns)
注意:如果字段内有转义双引号(比如"He said ""Hello"""),该正则会失效,因此仍优先推荐标准库。
内容的提问来源于stack exchange,提问作者Qdadedalus
相关产品推荐
相关产品推荐

