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'
问题:
-
为什么我在尝试复制文件时收到
NotADirectoryError
? shutil.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的主要内容,如果未能解决你的问题,请参考以下文章