Python解析CSV文件时如何正确读取分号分隔的内容
解决CSV解析时分隔符混淆的问题
嘿,这个坑我踩过!你遇到的问题根源很明确:Python的csv模块默认把逗号作为字段分隔符,但你的CSV文件实际是用分号来分隔不同字段的,而逗号只是数值里的小数分隔符——这就导致解析时完全打乱了字段结构。
第一步:正确指定字段分隔符
只需要在初始化csv.reader时,通过delimiter参数明确指定分号作为分隔符,就能得到你想要的解析结果:
import csv with open('parseme.csv') as csv_file: # 告诉reader用分号拆分字段 reader = csv.reader(csv_file, delimiter=';') # 读取每一行(你的文件如果只有一行的话,直接取next(reader)就行) for row in reader: print(row) # 输出: ['21/10/2017 0:00', '123,85', '88,8']
第二步:把带逗号的数值转成数字
拿到正确的字段后,要把123,85这种格式转成整数或浮点数,只需要先把逗号替换成小数点,再做类型转换:
import csv with open('parseme.csv') as csv_file: reader = csv.reader(csv_file, delimiter=';') for row in reader: date_time = row[0] # 转成浮点数后再转整数(如果需要取整) value1 = int(float(row[1].replace(',', '.'))) value2 = int(float(row[2].replace(',', '.'))) print(f"时间: {date_time}, 数值1: {value1}, 数值2: {value2}") # 如果要保留小数,直接转float就行:float(row[1].replace(',', '.'))
为什么原来的代码出错?
默认情况下csv.reader会把逗号当成字段分隔符,所以它会把你的原始行21/10/2017 0:00;123,85;88,8拆成三个部分:
21/10/2017 0:00;123(第一个逗号前的内容)85;88(两个逗号之间的内容)8(最后一个逗号后的内容)
这完全不符合你的实际字段划分,指定delimiter=';'就能解决这个问题。
内容的提问来源于stack exchange,提问作者Cheetara
相关产品推荐
相关产品推荐

