【问题标题】:Copy a file from one location to another in Python在 Python 中将文件从一个位置复制到另一个位置
【发布时间】:2019-03-21 23:06:17
【问题描述】:

我有一个名为 fileList 的列表,其中包含数千个文件名和大小,如下所示:

['/home/rob/Pictures/some/folder/picture one something.jpg', '143452']
['/home/rob/Pictures/some/other/folder/pictureBlah.jpg', '473642']
['/home/rob/Pictures/folder/blahblahpicture filename.jpg', '345345']

我想将使用 fileList[0] 作为源的文件复制到另一个完整的目标。比如:

copyFile(fileList[0], destinationFolder)

并让它将文件复制到该位置。

当我这样尝试时:

for item in fileList:
    copyfile(item[0], "/Users/username/Desktop/testPhotos")

我收到如下错误:

with open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: '/Users/username/Desktop/testPhotos'

我可以看看什么来让它工作?我在 Mac 和 Linux 上使用 Python 3。

【问题讨论】:

标签: python python-3.x file-copying


【解决方案1】:

您必须提供目标文件的全名,而不仅仅是文件夹名称。

您可以使用os.path.basename(path) 获取文件名,然后使用os.path.join(path, *paths) 构建目标路径

for item in fileList:
    filename = os.path.basename(item[0])
    copyfile(item[0], os.path.join("/Users/username/Desktop/testPhotos", filename))

【讨论】:

  • 简洁优雅。谢谢你。这很有意义,而且这个例子非常好。非常感谢
【解决方案2】:

您可能需要从源字符串中截取文件名并将其放在目标路径后面,因此它是完整的文件路径。

【讨论】:

    【解决方案3】:

    使用os.path.basename 获取文件名,然后在目标中使用它。

    import os
    from shutil import copyfile
    
    
    for item in fileList:
        copyfile(item[0], "/Users/username/Desktop/testPhotos/{}".format(os.path.basename(item[0])))
    

    【讨论】:

    • 如果你使用shutil 为什么不使用copy 直接允许将目录作为目标?
    【解决方案4】:

    你可以使用 shutil.copy() 命令:

    例如

        import shutil
    
        for item in fileList:
            shutil.copy(item[0], "/Users/username/Desktop/testPhotos")
    

    [来自 Python 3.6.1 文档。我试过了,它有效。]

    【讨论】:

    • 我刚刚意识到这是作为评论添加的。抱歉重复。
    • 这是对 OPs 问题的更准确答案。
    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多