我前几天发布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
。因此很明显,这两者都在某个地方访问相同的不可见文件。