Python写CSV文件为何使用collections及counter,代码丢失行原因求解
行丢失问题原因
- 核心逻辑原因:当前代码自带行过滤规则,只有行第一列的取值在整个CSV中出现次数≥4时,才会被写入新文件,所有不符合该规则的行都会被丢弃,自然和你预期写入5行的结果不符。
- 语法隐患原因:写文件时没有用
with上下文管理器管理文件句柄,也没有手动关闭文件,可能出现缓冲区内容未完全写入磁盘的情况,也会导致最终行数不符合预期。
collections 与 counter 的作用
collections是Python官方标准库中封装了常用高级容器的模块,这里用到的collections.defaultdict(int)是为了简化频率统计的代码:如果用普通字典做统计,需要额外判断键是否存在、不存在则初始化值为0,而defaultdict(int)会自动给不存在的键设置默认值0,省去手动写判断逻辑的步骤。- 代码中的counter变量作用是统计CSV所有行第一列的每个取值的出现次数,为后续的过滤逻辑提供判断依据。
如果你本身不需要做行过滤,只是想把修改后的所有行写入CSV,可以直接使用简化版代码:
import csv # 读取原CSV,Python3建议使用文本模式指定编码,避免乱码 with open('thefile.csv', 'r', encoding='utf-8') as f: data = list(csv.reader(f)) # 此处可添加你修改data的自定义逻辑 # ... # 写入新文件,添加newline=''避免Windows下出现多余空行 with open('/path/to/my/csv/file', 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) writer.writerows(data)
内容的提问来源于stack exchange,提问作者Bogdan Mind
相关产品推荐
相关产品推荐

