演示这种奇怪现象的非常简单的脚本:
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(来确保将文件发送到何处。