首页 > 解决方案 > 在 Python 中面临一个奇怪的“幻像文件系统”问题

问题描述

当我发布这个帖子时,我第一次注意到这个问题。本质上,我遇到了一个非常奇怪的问题,即 Python 在处理文件时“看到”文件浏览器中实际上并不存在的文件。

例如,如果我打开一个具有绝对路径的文件,通过 Python 修改并打印它的内容,它将准确地打印它应该打印的内容。但是当我尝试在我的 Windows 文件浏览器上通过相同的绝对路径打开同一个文件时,该文件不会随着我的修改而更新。

我最近也遇到了类似的问题 - 重命名文件。这是我编写的一个简单脚本,用于将文件名中的所有空格替换为下划线。

重命名.py:

import os

i = 0
path = "E:/sample_path/"

for filename in os.listdir(path):
    src = path + filename
    dst = path + filename.replace(" ", "_")

    os.rename(src, dst)
    i += 1

print(str(i) + " files processed.")

在 Python 中进行一些打印后,我可以看到目录中的所有文件都被正确重命名,但是当我实际查看目录时它没有正确更新。在文件浏览器和使用dir命令中。与在 Python 中创建新文件一样,它们存在于 Python 眼中,但在 Windows 中却无处可寻,即使隐藏文件可见且全部可见。

现在是有趣的部分:如果我在 cmd 中打开 python 编辑器并导入它,这个脚本就可以工作。所以我知道这一切都是正确的,没有语法错误或任何东西——这只是 Python 发生的一个奇怪的错误。

例如,如果我进入命令提示符并键入python rename.py它不会返回任何错误,甚至会输出正确的结果 -x files processed.但它实际上不会修改任何“真实”文件。

但是,如果我进入命令提示符并键入python以调出 cmd 编辑器,然后键入import rename它会给出正确的输出并正确更新所有文件。所以暂时这种解决方法会有所帮助,但这是一个非常奇怪的问题,我还没有看到其他人遇到它。这几乎就像 Python 创建了文件系统的临时副本并且没有完成与 Windows 的同步。

我已经尝试过多次重新安装 Python,包括 x64 和 x86 版本,但到目前为止还没有修复它。

编辑:这是说明我的问题的简化示例。

写.py:

f = open("newfile.txt", "w+")
f.write("hello new file")
f.close()

读取.py:

f = open("newfile.txt", "r")

for l in f.readlines():
   print(l)

如果我运行write.py,则不会返回任何错误。但在我当前的工作目录中也没有newfile.txt可见的文件名。但是,如果我运行read.py它会打印hello new file. 很明显,这两个都在某处访问同一个不可见文件。

在此处输入图像描述

标签: python-3.xcmdwindows-7atom-editor

解决方案


推荐阅读