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



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

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:Usersjoe1234,然后运行;但是,资源管理器中只显示C:Usersjoe1234toplevel,不显示任何子目录。

更为复杂的是,当我使用相同的输入再次运行脚本时,我得到:

FileExistsError:[WinError 183]当文件已经存在时无法创建文件:'C:\Users\joe1234\toplevel`

隐藏文件已启用,使用具有隐藏属性的dir不会显示任何内容。当输入仅为C:C:<some_dir>下的任何其他目录时,仅在源自C:Users的目录中不会出现此问题。

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

您遇到了两个独立的问题。

1.FileExistsError

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

所以,如果您要删除toplevel文件夹,那么您将不会得到FileExistsError

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

# (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防病毒软件自动推出";可疑的";python进程进入虚拟(隔离(环境,就像沙箱一样,所以文件夹实际上是在其他地方创建的。

有点无关,但一个简单得多的想法是使用os.path.expanduser(),它将自动找到用户目录路径(比输入函数更容易(

import os
dir_ = os.path.expanduser("~/toplevel")
os.mkdir(dir_)
for i in range(10):
os.mkdir(os.path.join(dir_, str(i)))

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

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

相关内容

最新更新