You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中读取指定逗号为分隔符的CSV(分隔符与小数均为逗号)

处理混用逗号作为分隔符和小数点的CSV文件

这问题确实有点棘手——毕竟CSV规范里一般不会让逗号同时当分隔符和小数点用,但既然遇到了,咱们就来解决它。核心思路是先把指定位置的逗号替换成临时分隔符,再把剩下的逗号转成小数点,最后用临时分隔符拆分字段,下面是具体实现:

方法一:逐行定位逗号处理(适合即时分析)

这种方法直接针对你指定的逗号序号来操作,逻辑清晰,容易调整:

# 你指定的要作为分隔符的逗号序号(从1开始计数)
separator_commas = {1, 2, 3, 4, 6, 8, 10, 11, 15}
# 选一个不会出现在数据里的临时分隔符,避免冲突
temp_sep = '|'

with open('your_data.csv', 'r', encoding='utf-8') as input_file:
    # 逐行处理,避免大文件占用过多内存
    for line_num, line in enumerate(input_file, 1):
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        
        # 找出当前行所有逗号的位置索引
        all_comma_positions = [idx for idx, char in enumerate(cleaned_line) if char == ',']
        
        # 把指定序号的逗号替换成临时分隔符
        line_list = list(cleaned_line)
        for comma_num in separator_commas:
            # 序号转索引要减1,同时判断是否超出当前行的逗号数量,防止报错
            if (comma_num - 1) < len(all_comma_positions):
                target_pos = all_comma_positions[comma_num - 1]
                line_list[target_pos] = temp_sep
        
        # 把剩下的逗号替换成小数点,再拆分字段
        processed_line = ''.join(line_list).replace(',', '.')
        fields = processed_line.split(temp_sep)
        
        # 这里可以根据需求处理字段,比如打印、存入列表
        print(f"第{line_num}行处理后字段: {fields}")

关键细节说明

  • 用集合存储分隔符逗号的序号,方便快速匹配
  • 临时分隔符选|是因为它很少出现在常规数据里,如果你数据里有这个符号,可以换成^或#这类冷门符号
  • 增加了空行跳过和逗号数量判断,避免出现索引越界或无效数据的问题

方法二:生成标准CSV文件(适合长期复用)

如果你需要把处理后的数据保存成规范的CSV(逗号分隔、小数点用.),可以直接写入新文件:

import csv

separator_commas = {1, 2, 3, 4, 6, 8, 10, 11, 15}
temp_sep = '|'

with open('your_data.csv', 'r', encoding='utf-8') as input_file, \
     open('cleaned_data.csv', 'w', encoding='utf-8', newline='') as output_file:
    
    writer = csv.writer(output_file)
    
    for line in input_file:
        cleaned_line = line.strip()
        if not cleaned_line:
            continue
        
        all_comma_positions = [idx for idx, char in enumerate(cleaned_line) if char == ',']
        line_list = list(cleaned_line)
        
        for comma_num in separator_commas:
            if (comma_num - 1) < len(all_comma_positions):
                line_list[all_comma_positions[comma_num - 1]] = temp_sep
        
        processed_line = ''.join(line_list).replace(',', '.')
        fields = processed_line.split(temp_sep)
        writer.writerow(fields)

print("处理完成,已保存到cleaned_data.csv")

处理完成后,你就可以用常规的csv.reader直接读取新生成的文件,完全符合标准CSV格式。

内容的提问来源于stack exchange,提问作者Freyman Mendoza Plata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:22:46