Python读取含多元素列的CSV文件异常问题求助
解决CSV文件解析异常的问题
嘿,我一眼就发现问题所在啦!你的CSV文件是用**分号(;)**作为列分隔符的,但你在代码里却指定了逗号(,)作为分隔符,这就导致解析器把整行内容当成单个字段,直到碰到最后一行里的逗号才错误拆分,于是出现了你看到的混乱输出。
先回顾下你的原始CSV内容:
id;name;duration;predecessors; 10;A;7;; 20;B;10;10; 25;B2;3;10; 30;C;5;10; 40;D;5;20,30, 25;
你之前使用的代码:
csv_file = open(path_to_csv, 'r') csv_file_reader = csv.reader(csv_file, delimiter=',') first_row = True for row in csv_file_reader : if not first_row: print(row) else : first_row = False
得到的异常输出:
['10;A;7;;'] ['20;B;10;10;'] ['25;B2;3;10;'] ['30;C;5;10;'] ['40;D;5;20', '30', ' 25;']
核心修复:修改分隔符为分号
你只需要把csv.reader的delimiter参数改成';',解析器就能正确识别CSV的列分隔了。修正后的代码如下(顺便帮你补上了缺失的csv模块导入,还优化了文件读取的方式):
import csv path_to_csv = "你的文件路径.csv" # 使用with语句自动管理文件,避免忘记关闭 with open(path_to_csv, 'r') as csv_file: csv_file_reader = csv.reader(csv_file, delimiter=';') # 直接读取表头,替代原来的first_row变量,更简洁 headers = next(csv_file_reader) for row in csv_file_reader: print(row)
运行后你会得到正确的解析结果:
['10', 'A', '7', '', ''] ['20', 'B', '10', '10', ''] ['25', 'B2', '3', '10', ''] ['30', 'C', '5', '10', ''] ['40', 'D', '5', '20,30, 25', '']
额外优化:拆分predecessors字段(可选)
如果之后你需要把predecessors里的多个ID转换成干净的列表,可以再加上一段处理逻辑,自动去掉空格并拆分:
import csv path_to_csv = "你的文件路径.csv" with open(path_to_csv, 'r') as csv_file: csv_file_reader = csv.reader(csv_file, delimiter=';') headers = next(csv_file_reader) for row in csv_file_reader: # 处理predecessors字段 pred_str = row[3].strip() if pred_str: # 拆分并去掉每个ID的空格 predecessors = [id.strip() for id in pred_str.split(',')] else: predecessors = [] row[3] = predecessors print(row)
这样输出会变成更易用的格式:
['10', 'A', '7', [], ''] ['20', 'B', '10', ['10'], ''] ['25', 'B2', '3', ['10'], ''] ['30', 'C', '5', ['10'], ''] ['40', 'D', '5', ['20', '30', '25'], '']
内容的提问来源于stack exchange,提问作者user9601710
相关产品推荐
相关产品推荐

