【问题标题】:os.mkdir succeeds but no directory appears in C:\Users\<user>os.mkdir 成功但没有目录出现在 C:\Users\<user>
【发布时间】:2021-07-08 20:13:53
【问题描述】:

非常简单的脚本来演示这个奇怪的东西:

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,没有子目录。

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

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

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

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

【问题讨论】:

  • 会不会是权限问题?因为它是一个用户目录
  • @MaxwellRedacted 如果我是用户joe1234,它不应该;另外,文档状态 PermissionError 将被抛出。此外,如果我从 IDLE 运行 os.mkdir,则会创建目录。该问题似乎仅在通过命令行运行解释器并指定脚本时出现。
  • 这意味着文件夹已经创建成功,文件资源管理器的问题没有显示更新的文件系统,要仔细检查,您可以打开 cmd 行窗口并使用 dir 命令显示目标的内容文件夹
  • @pstatix 嘿伙计,你不应该这样回答,我是来帮你的。
  • 作为linux上的参考,所以我怀疑它的python代码本身,除非python中存在错误

标签: python python-3.x windows


【解决方案1】:

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

1。 FileExistsError

当您使用相同的输入第二次运行脚本时,您的脚本将调用os.mkdir(top),其中top='C:\\Users\\joe1234\\toplevel',但该文件夹已经存在(在第一次运行之后)。如os.mkdirdocumentation 中所述,当文件夹已经存在时,它会引发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本身。不幸的是,我只能猜测,为什么没有创建子目录。

通常与防病毒相关的奇怪问题。检查此answer。 Comodo 杀毒软件自动将“可疑”python 进程放入虚拟(隔离)环境,如沙箱,因此文件夹实际上是在其他地方创建的。

【讨论】:

    【解决方案2】:

    有点不相关,但更简单的想法是使用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/ 目录。第二次运行时,已经有一个顶级目录,所以如果你想第二次成功运行,你需要删除它。

    【讨论】:

      【解决方案3】:

      您可能希望使用绝对路径 (abspath) 来确定您将文件发送到何处。

      【讨论】:

        猜你喜欢
        • 2016-02-17
        • 1970-01-01
        • 2023-01-02
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        相关资源
        最近更新 更多