如何读取CSV文件并将数值中的逗号替换为点
解决方案
问题原因
你查到的decimal=','参数不属于Python标准库csv.reader的可配置参数,该参数是pandas库read_csv方法的专属参数,所以直接添加到原生csv.reader中不会生效。
方案1:修改原生csv读取代码(无需引入第三方库)
直接在读取每行数据后遍历元素替换逗号即可,可根据需求选择是否直接转为数值类型:
仅替换逗号不转类型
for file_to_open in filename: file_path = os.path.realpath(file_to_open) path_corrected = file_path.replace("file_mngt", "data") opened = open(path_corrected) reader = csv.reader(opened, delimiter = ";") header = next(reader) for row in reader: # 遍历所有元素替换数值中的逗号为点 processed_row = [item.replace(',', '.') for item in row] print(processed_row)
替换后直接转为数值类型
import csv import os def convert_num(item): # 先替换逗号为点 item_dot = item.replace(',', '.') # 尝试转数值,失败则返回原字符串 try: return int(item_dot) if item_dot.isdigit() else float(item_dot) except ValueError: return item for file_to_open in filename: file_path = os.path.realpath(file_to_open) path_corrected = file_path.replace("file_mngt", "data") opened = open(path_corrected) reader = csv.reader(opened, delimiter = ";") header = next(reader) for row in reader: processed_row = [convert_num(item) for item in row] print(processed_row)
方案2:使用pandas读取(自动处理小数点)
如果允许引入第三方库,直接使用pandas的对应参数即可一步完成处理:
import pandas as pd import os for file_to_open in filename: file_path = os.path.realpath(file_to_open) path_corrected = file_path.replace("file_mngt", "data") # 直接指定分隔符和小数点符号 df = pd.read_csv(path_corrected, delimiter=';', decimal=',') # 逐行输出示例 for _, row in df.iterrows(): print(row.tolist())
内容的提问来源于stack exchange,提问作者Durrin_Lorthak
相关产品推荐
相关产品推荐

