如何在Python中使用pandas.read_csv后提前删除原CSV文件
解决CSV读取后删除原文件提示被占用的问题
核心原因
Windows系统下,文件句柄未完全释放时无法执行删除操作。pd.read_csv默认处理文件时,有时不会立即关闭文件句柄(尤其是大文件场景),导致删除操作触发占用报错。
解决方案
方案1:手动管理文件句柄(适合可一次性读入内存的文件)
用with语句显式打开文件,读取完成后文件会自动关闭,此时就能安全删除原文件:
import pandas as pd import os file_path = "你的大文件.csv" # 手动打开文件,读取后自动关闭句柄 with open(file_path, 'r', encoding='utf-8') as f: df = pd.read_csv(f) # 此时文件已释放,直接删除 os.remove(file_path) # 执行分割逻辑 chunk_size = 500000 for idx, start in enumerate(range(0, len(df), chunk_size)): chunk_df = df[start:start+chunk_size] chunk_df.to_csv(f"子文件_{idx}.csv", index=False)
方案2:分块读写+读完即删(适合超大型文件,避免内存溢出)
如果文件大到无法一次性读入内存,改成边读边写子文件,全部处理完成后立即删除原文件,既解决磁盘空间问题,也不会触发文件占用:
import pandas as pd import os chunk_size = 500000 file_path = "你的大文件.csv" # 分块读取并直接写入子文件 for idx, chunk in enumerate(pd.read_csv(file_path, chunksize=chunk_size)): chunk.to_csv(f"子文件_{idx}.csv", index=False) # 所有子文件生成后,删除原文件 os.remove(file_path)
方案3:强制释放句柄(应急方案)
如果不想改读取逻辑,可以手动触发垃圾回收释放文件句柄,但可靠性不如前两种:
import pandas as pd import os import gc df = pd.read_csv("你的大文件.csv") # 先把df转存到临时变量(避免被误删) temp_df = df.copy() # 释放原df并触发垃圾回收 del df gc.collect() # 此时文件句柄已释放,删除原文件 os.remove("你的大文件.csv") # 用临时变量执行分割逻辑 chunk_size = 500000 for idx, start in enumerate(range(0, len(temp_df), chunk_size)): chunk_df = temp_df[start:start+chunk_size] chunk_df.to_csv(f"子文件_{idx}.csv", index=False)
内容的提问来源于stack exchange,提问作者BufsXD
相关产品推荐
相关产品推荐

