如何在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
相关产品推荐
相关产品推荐

