面对Python中一个奇怪的“虚拟文件系统”问题

时间:2019-04-24 19:27:38

标签: python-3.x cmd windows-7 atom-editor

我前几天发布this thread时首先注意到了这个问题。本质上,我遇到了一个非常奇怪的问题,即在使用文件时,Python“看到”了文件浏览器中实际上不存在的文件。

例如,如果我打开一个带有 absolute 路径的文件,然后通过Python修改并打印该文件的内容,它将完全打印出预期的样子。但是,当我尝试通过Windows文件浏览器上的同一 absolute 路径打开同一文件时,该文件不会使用我的修改进行更新。

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

rename.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版本,到目前为止都还没有修复。

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

write.py:

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

read.py:

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

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

如果我运行write.py,则不会返回任何错误。但是,在当前工作目录中看不到名为newfile.txt的文件。但是,如果我运行read.py,它将打印hello new file。因此很明显,这两者都在某个地方访问相同的不可见文件。

enter image description here

0 个答案:

没有答案