Python:复制文件夹时shutil.copy2方法创建一个不在原始文件夹中的.db文件,复制文件时得到NotADirectoryError

Posted

技术标签:

【中文标题】Python:复制文件夹时shutil.copy2方法创建一个不在原始文件夹中的.db文件,复制文件时得到NotADirectoryError【英文标题】:Python: when copying folders shutil.copy2 method creates a .db file that wasn't in the original file folder, when copying files get NotADirectoryError 【发布时间】:2021-12-20 11:57:18 【问题描述】:

当我运行此脚本将文件从源文件夹复制到目标文件夹时

def CopyFol_Subfolders(src, dst):
    for item in os.listdir(src):
        s = os.path.join(src, item)
        d = os.path.join(dst, item)
        if os.path.isdir(s):
            CopyFol_Subfolders(s, d)
        else:
            shutil.copy2(s, d)

src = r'C:/Users/Kevin/Documents/TEMPORARY/GEOLOGY TO SEND/Well Logs/B/BAKER B E 1_42/BAKER-B-E-1_42_MICRO_1.TIF'
dst = r'C:/Users/Kevin/Documents/TEMPORARY/NTX-Wells/42' 

没有复制任何内容,我收到此错误:

---------------------------------------------------------------------------
NotADirectoryError                        Traceback (most recent call last)
<ipython-input-37-ff1a78fa2fd6> in <module>
----> 1 CopyFol_Subfolders(src, dst)

<ipython-input-36-1c270b8fee24> in CopyFol_Subfolders(src, dst)
      1 def CopyFol_Subfolders(src, dst):
----> 2     for item in os.listdir(src):
      3         s = os.path.join(src, item)
      4         d = os.path.join(dst, item)
      5         if os.path.isdir(s):

NotADirectoryError: [WinError 267] The directory name is invalid: 'C:/Users/Kevin/Documents/TEMPORARY/GEOLOGY TO SEND/Well Logs/B/BAKER B E 1_42/BAKER-B-E-1_42_MICRO_1.TIF'

但是,当我将源文件更改为目录时(从“src”路径中删除文件扩展名),它会复制目录中的所有内容并添加一个以前不存在的 .db 文件。我今天(2021 年 11 月 6 日)刚刚这样做,但它显示 .db 文件是在 2018 年创建的,因此它似乎不是通过运行此代码生成的。截图如下。

src = r'C:/Users/Kevin/Documents/TEMPORARY/GEOLOGY TO SEND/Well Logs/B/BAKER B E 1_42'
dst = r'C:/Users/Kevin/Documents/TEMPORARY/NTX-Wells/42' 

问题:

    为什么我在尝试复制文件时收到NotADirectoryErrorshutil.copy2 应该能够复制单个文件。 为什么这个.db 文件出现在我的目标文件夹中而不是我的源文件夹中?我的文件资源管理器中的设置设置为不隐藏任何文件。我不确定.db 文件与哪个程序相关联,并且文件属性中没有任何指示——否则无法读取它(据我所知)。 .db 文件可能与某些软件相关联(数据来自我工作的数据库),但这并不能解释为什么它只会在复制文件夹时出现。对此非常困惑。

我在我的计算机上拥有完全的管理员权限并以管理员身份运行 Conda,因此这些问题不应源于可访问性问题。 在 Conda Jupyter Notebook 6.3.0 上运行 Python 3.8

【问题讨论】:

关于您的第一个问题。您传入的是一个文件的 src 参数,然后您立即在其上调用 os.listdir 。那会失败的。 在尝试列出其上的目录之前,您需要检查它是否是一个目录。 【参考方案1】:

感谢@Frank Yellin 为我指出了第一季度的正确方向。我找到了第二季度的答案(有点)。

thumbs.db 文件是一个 Windows 系统文件,它为 Windows 操作系统上包含图像的文件夹自动生成(并自动将“属性”指定为“隐藏”)。它是一个缩略图缓存——允许文件资源管理器显示文件图像的缩略图。调用 os.listdir() 函数时会列出来。

我仍然不知道为什么 shutil.copy2 方法将文件从“隐藏”状态更改。无论哪种方式,这对我正在做的事情来说都不是什么大问题,我会简单地将其过滤掉。

【讨论】:

以上是关于Python:复制文件夹时shutil.copy2方法创建一个不在原始文件夹中的.db文件,复制文件时得到NotADirectoryError的主要内容,如果未能解决你的问题,请参考以下文章

python基础-shutil模块

python shutil 模块

python- shutil 高级文件操作

运维应用

shutil模块

如何在 python 中复制和移动另一个文件夹或目录? [复制]