Skip to main content
 首页 » 编程设计

python之如何在不重启计算机的情况下强制 Python 代码再次读取输入文件

2025年05月04日25freeliver54

我正在扫描大量文件以寻找一些标记。我开始真正相信,一旦我运行了一次代码,Python 就不会从磁盘重新读取实际文件。我发现这种行为很奇怪,因为有人告诉我,我需要以我现有的方式构建文件访问的一个原因是刷新句柄和文件内容。但那不可能。

我正在读取的列表中有 9,568 个文件路径。如果我关闭 Python 并重新启动我的计算机,大约需要 6 分钟 来读取文件并确定正则表达式是否返回了任何内容。

但是,如果我第二次运行该代码,则需要大约 36 秒。光是笑,平均文档就有 53,000 字。

因此我得出结论,Python 仍然可以访问它在第一次迭代中读取的文件。

我还想观察一下,第一次执行此操作时,我可以听到磁盘旋转的声音(E:\- Python 在 C: 上)。 E 只是一个带有 126 MB 缓存的旋转磁盘——我认为缓存不足以容纳这些文件的内容。当我稍后这样做时,我听不到磁盘旋转的声音。

这是代码

import re 
test_7A_re = re.compile(r'\n\s*ITEM\s*7\(*a\)*[.]*\s*-*\s*QUANT.*\n',re.IGNORECASE) 
no7a = [] 
for path in path_list: 
    path = path.strip() 
    with open(path,'r') as fh: 
        string = fh.read() 
    items = [item for item in re.finditer(test_7A_re,string)] 
    if len(items) == 0: 
        no7a.append(path) 
        continue 

我关心这个有很多原因,一个是我在考虑使用多处理。但是,如果瓶颈是读取文件,我看不出我会得到多少。我也认为这是一个问题,因为我会担心文件被修改并且没有最新版本的文件可用。

我标记这个 2.7 是因为我不知道这种行为是否在各个版本中持续存在。

为了确认此行为,我修改了我的代码以作为 .py 文件运行,并添加了一些计时代码。然后我重新启动了我的电脑——第一次运行需要 5.6 分钟,第二次(没有重新启动)时间是 36 秒。两种情况下的输出相同。

真正有趣的是,即使关闭 IDLE(但不要重新启动我的计算机),运行代码仍然需要 36 秒。

所有这些都向我表明,文件在第一次后不会从磁盘读取 - 这对我来说是惊人的行为,但它似乎很危险。

需要明确的是,结果是一样的——我相信考虑到我运行的计时测试以及我没有听到磁盘旋转的事实,Python 仍然可以以某种方式访问​​这些文件。

请您参考如下方法:

这是由 Windows 中的缓存引起的。它与 Python 无关。

为了阻止 Windows 缓存您的读取:

  1. 在 Windows 中禁用分页文件并将 RAM 填充到 90%

  2. 使用一些工具来禁用 Windows 中的文件缓存 like this one .

  3. 在 RAM 有限的 Windows 机器上的 Linux 虚拟机上运行您的代码。在 Linux 中,您可以更好地控制缓存

  4. 使文件大得多,这样它们就放不下缓存