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

如何在pandas read_csv读取至文件末尾后重新从头读取且保证性能?

解决方案:无需反复打开关闭文件实现重复读取

方法1:复用已打开的文件对象(适合大文件)

直接先打开文件,每次读取前将文件指针移到开头,再创建pandas的分块读取器。这样文件只打开一次,避免反复IO开销:

import pandas as pd

with open("myfile.csv", "r") as f:
    # 示例:循环读取3次,可根据需求替换为自定义终止条件
    for _ in range(3):
        f.seek(0)  # 将文件指针移回文件开头
        reader = pd.read_csv(f, chunksize=10**6)
        for chunk in reader:
            for _, row in chunk.iterrows():
                do_something(row)

方法2:将文件加载到内存复用(适合小/中等文件)

如果文件大小在内存承受范围内,一次性把文件内容读到内存,用io.StringIO模拟文件对象,之后每次读取前重置指针即可,性能比直接操作磁盘文件更快:

import pandas as pd
import io

# 一次性读取文件内容到内存
with open("myfile.csv", "r") as f:
    csv_data = f.read()

# 用StringIO包装成可重复操作的"文件"
csv_io = io.StringIO(csv_data)

while True:
    csv_io.seek(0)  # 重置到开头
    reader = pd.read_csv(csv_io, chunksize=10**6)
    for chunk in reader:
        for _, row in chunk.iterrows():
            do_something(row)
    # 记得添加终止循环的条件,比如判断某个标志位或循环次数

额外优化建议

  • 避免使用iterrows():它的遍历效率很低,如果你的do_something可以用pandas的向量化操作实现(比如chunk.apply(do_something, axis=1)或者直接对列进行运算),能大幅提升处理速度。
  • 若需无限循环读取,务必添加退出逻辑,比如捕获外部信号或设置循环次数,防止死循环。

内容的提问来源于stack exchange,提问作者Wai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:46:58