Python os.mkdir成功,但C:\Users\<;中未显示任何目录;用户>;

Python os.mkdir成功,但C:\Users\<;中未显示任何目录;用户>;,python,python-3.x,windows,Python,Python 3.x,Windows,非常简单的脚本来演示这种奇怪的现象: import os root = input('Where to save?: ') top = os.path.join(root, 'toplevel') os.mkdir(top) for i in range(10): os.mkdir(os.path.join(top, str(i))) 出现提示时,root值为C:\Users\joe1234,然后运行;但是,资源管理器中只显示C:\Users\joe1234\toplevel,而

非常简单的脚本来演示这种奇怪的现象:

import os

root = input('Where to save?: ')

top = os.path.join(root, 'toplevel')
os.mkdir(top)

for i in range(10):
    os.mkdir(os.path.join(top, str(i)))
出现提示时,
root
值为
C:\Users\joe1234
,然后运行;但是,资源管理器中只显示
C:\Users\joe1234\toplevel
,而不显示子目录

为了进一步增加复杂性,当我使用相同的输入再次运行脚本时,我得到:

FileExistError:[WinError 183]无法创建已存在的文件:“C:\Users\joe1234\toplevel”`

隐藏文件已启用,使用带有隐藏属性的
dir
不会显示任何内容。当输入仅仅是
C:\
C:\
下的任何其他目录,仅在
C:\Users
下的目录中时,不会发生此问题

我使用的是CPython 3.6.0,我使用的是Windows 10.0.18363 Build 18363

您遇到了两个独立的问题

1. <代码>文件存在错误 当您使用相同的输入再次运行脚本时,脚本将调用
os.mkdir(top)
,其中
top='C:\\Users\\joe1234\\toplevel'
,但此文件夹已存在(第一次运行后)。如
os.mkdir
中所述,当文件夹已经存在时,它会引发
fileexisterror

因此,如果您要删除
toplevel
文件夹,则不会获得
fileexisterror

您还可以通过两种方式更改脚本以避免出现此错误:

# (a) check if folder already exists
if not os.path.exists(path):
    os.mkdir(path)

# (b) use try/catch
try:
    os.mkdir(path)
except FileExistsError:
    pass
2.不显示子目录 这个问题当然在于环境,而不是python本身。不幸的是,我只能猜测为什么不创建子目录


通常这些奇怪的问题与抗病毒药物的使用有关。看看这个。Comodo antivirus会自动将“可疑”的python进程放入虚拟(隔离)环境,如沙箱,因此文件夹实际上是在其他地方创建的。

稍微无关,但更简单的方法是使用
os.path.expanduser()
自动查找用户目录路径(比您的输入功能更简单)


对于您的问题,您可能会收到一个
文件existserror
,因为您可能忘记删除您的
~/toplevel/
目录。第二次运行此操作时,将已经有一个toplevel目录,因此如果您希望再次成功运行此操作,则需要删除该目录。

您可能需要使用绝对paths(abspath)确保将文件发送到何处。

这可能是权限问题吗?因为它是用户directory@MaxwellRedacted如果我是user
joe1234
,它不应该是;另外,将抛出docs state
PermissionError
。此外,如果我从空闲运行
os.mkdir
,将创建目录仅当通过命令行运行解释器并指定脚本时,才会出现此问题。这意味着文件夹已成功创建,文件资源管理器的问题是没有显示更新的文件系统。要再次检查,可以打开cmd line窗口并使用dir命令显示目标文件的内容folder@pstatix嘿,伙计,你不应该这样回答,我是来帮助你的。作为linux上的参考,我怀疑这是python代码本身,除非python中有bug
import os
dir_ = os.path.expanduser("~/toplevel")
os.mkdir(dir_)

for i in range(10):
    os.mkdir(os.path.join(dir_, str(i)))