【问题标题】:Why is os.listdir showing to a file while I set it to the directory?为什么 os.listdir 在我将文件设置到目录时显示到文件中?
【发布时间】:2021-04-15 13:59:17
【问题描述】:

所以,我正在制作一个 python 项目,它删除目录中的文件和我的 代码是:

    tmp_dir = r"C:\Users\User\AppData\Roaming\Microsoft\Teams\tmp"
    tmp_list = os.listdir(tmp_dir)

    for tmp_files in tmp_list:
        shutil.rmtree(os.path.join(tmp_dir, tmp_files))

我收到以下错误:

Traceback(最近一次调用最后一次):文件“”,第 9 行,在 shutil.rmtree(os.path.join(tmp_dir, tmp_files)) 文件 "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\shutil.py", 第 737 行,在 rmtree 中 return _rmtree_unsafe(path, onerror) 文件 "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\shutil.py", 第 596 行,在 _rmtree_unsafe onerror(os.scandir, path, sys.exc_info()) 文件 "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\shutil.py", 第 593 行,在 _rmtree_unsafe with os.scandir(path) as scandir_it: NotADirectoryError: [WinError 267] 目录名无效: 'C:\Users\User\AppData\Roaming\Microsoft\Teams\tmp\x64.json'

进程以退出代码 1 结束

你能告诉我我的代码有什么问题吗?任何帮助表示赞赏。

【问题讨论】:

    标签: python python-3.x windows directory subdirectory


    【解决方案1】:

    shutil.rmtreedeletes an entire directory tree.

    要删除单个文件,您可以使用os.remove

    【讨论】:

    • 那么,我是否因为无法删除目录中的所有文件而收到错误消息?
    • 不,您正在尝试使用shutil.rmtree 删除每个文件(检查您的for 循环),但如果您需要使用os.remove。如果您只需要删除 tmp_dir,请在其上使用 rmtree。
    • 是的,我想删除该目录中的每个文件。
    • 要删除目录及其中的所有内容,请在目录上调用shutil.rmtree 一次。就是这样。
    【解决方案2】:

    os.listdir 返回给定路径中的所有文件和目录。如果要删除所有目录,可以使用 os.path.isdir 过滤,然后只删除目录。

    您可以尝试使用此代码获取给定文件夹中的所有目录:

    tmp_list = [d for d in os.listdir(tmp_dir) if os.path.isdir(os.path.join(tmp_dir, d))]
    

    【讨论】:

      【解决方案3】:

      os.listdir 列出文件和文件夹

      您正在执行的 rmtree 仅适用于文件夹

      所以当迭代到达一个文件时,它会给出错误

      对于文件夹和文件,您需要执行类似的操作

      for temp_files in temp_list :
          if temp_files.isdir():
              shutil.rmtree(os.path.join(tmp_dir, tmp_files))
          else :
              os.remove("file path/filename")
      

      【讨论】:

        猜你喜欢
        • 2018-02-27
        • 2015-06-02
        • 1970-01-01
        • 2019-01-29
        • 2021-09-16
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 2021-02-23
        相关资源
        最近更新 更多