如何将文件夹中CSV文件行数统计结果保存为字典?
解决“I/O operation closed on file”错误的方案
错误原因
你遇到的错误是因为**with语句块执行完毕后,文件对象会被自动关闭**。原代码仅打印结果时,所有文件操作都在with块内完成,所以没问题;但添加字典保存逻辑时,你大概率将部分文件操作移到了with块外部,导致访问已关闭的文件对象触发报错。
修正后的代码
import os # 初始化存储统计结果的字典 row_counts = {} # 替换为你的目标文件夹路径 target_path = "./your_csv_folder" for filename in os.listdir(target_path): # 先筛选csv文件,避免无效文件打开操作 if filename.endswith('.csv'): # 拼接完整文件路径,防止找不到文件 full_file_path = os.path.join(target_path, filename) with open(full_file_path, 'r', encoding="latin-1") as fileObj: # 统计行数(减1去除表头) total_rows = len(fileObj.readlines()) - 1 print(f'Rows counted {total_rows} in the csv {filename}') # 将结果存入字典 row_counts[filename] = total_rows # 查看最终字典结果 print("\n统计结果字典:") print(row_counts)
关键优化点
- 调整文件判断顺序:先判断是否为csv文件再打开,避免无效的文件IO操作。
- 拼接完整路径:
os.listdir仅返回文件名,直接打开会在当前工作目录查找,用os.path.join拼接目标路径更可靠。 - 所有文件操作限制在
with块内:确保统计、读取等操作都在文件对象有效生命周期内完成,避免访问已关闭的文件。
内容的提问来源于stack exchange,提问作者onionbag
相关产品推荐
相关产品推荐

