将文件复制到现有目录会导致 IOError [Error 21] 是一个目录。

11

我遇到了这个错误:

IOError [Error 21] is a directory

当我尝试将文件复制到已存在的目录中时,我这样做:

shutil.copyfile(src, dst)

我的问题是什么?src 是文件,dst 是已存在的目录。


1
正如我所说的,dst是一个已存在的目录。这正是我想要的——将文件复制到一个目录中。 - Jacobian
是的,问题在于dst必须是文件路径。尝试使用shutil.copyfile(src, '%s/%s' % (dst, src.split()[-1]))来解决。 - boaz_shuster
根据Python文档:“将名为src的文件的内容(无元数据)复制到名为dst的文件中”。如果要复制到目录,请尝试使用shutil.copy - Tuan Anh Hoang-Vu
@bshuster。请您将评论转化为回答。如果可以使用,我会接受它。 - Jacobian
3个回答

11

9
你已经在问题中回答了自己。 dst 应该是被复制文件的路径。所以如果你想要将文件复制到 /var/lib/my/ 目录下,且你的文件名为 f1,那么 dst 应该是 /var/lib/my/f1.txt 尝试使用建议中 这里 所提供的 shutil.copy 函数,由 john-estess 提供。
shutil.copy(src, dst)

或者尝试使用以下代码片段来修复此问题。
shutil.copyfile(src, '%s/%s' % (dst, src.split('/')[-1]))

假设src是您想要复制的文件的路径,例如/var/log/apache/access.log,而dst是要复制文件的目录路径,例如/var/lib/my,则新的目标路径为/var/lib/my/access.log

谢谢您,先生!当stackoverflow允许我这样做时,我会在8分钟内接受它的 =) - Jacobian
谢谢!我很感激;-) - boaz_shuster
1
谢谢,你帮了我很多 \o/ - psicopante

1
请见代码片段,了解源路径是指文件的路径,目标路径也是指文件的路径(在运行此函数之前尚不存在)。
for file in orig_files:
    shutil.copyfile(SOURCE_PATH + file_name, DEST_PATH + file_name)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接