【问题标题】:copying specific files with shutil()使用 shutil() 复制特定文件
【发布时间】:2021-05-07 22:49:03
【问题描述】:

我有一个包含 7500 张图像的文件夹。我需要使用 Python 中的 shutil 模块将前 600 张图像复制到一个新文件夹中。

我试图在网上寻找相关的东西,但路径的使用有点令人困惑。我的命令序列到底应该是什么?我猜它会像这样开始:

import os
import shutil
l=os.listdir(path)
for file in l[0:600]:

编辑:在澄清了 shutil.copy() 的作用之后,我想出了:

import os
import shutil
l=os.listdir(path)
for file in l[0:600]:
    shutil.copy(file, destination, *, follow_symlinks = True)

但它突出显示 * 后的逗号,并给出错误 iterable argument unpacking follows keyword argument unpacking。语法有什么问题?

【问题讨论】:

  • 什么算作前 600 个?即你是如何对它们进行排序的?
  • 它们被命名为 0000, 0001,0002....jpg
  • 文件在目录中没有定义的顺序,因此您必须按名称对它们进行排序以给它们一个(否则顺序是随机的)。由于*,您在编辑中遇到错误 - 为什么将其粘贴在那里,因为它没有任何意义。
  • 去掉 *,.它们用于您不使用的参数

标签: python shutil


【解决方案1】:

好吧,os.listdir() 将返回随机排序的文件,您可以做的一件事是您可以在每个文件上调用 os.stat(file).st_mtime,这将返回该文件上次修改时的时间戳,然后您可以在该时间之前对文件进行排序获取第一个/最后一个文件。但这实际上取决于您的用例以及您如何解释第一个文件适合您。但是当涉及到shutil库时,您可以调用:

for file in l[0:600]:
    shutil.copy(file, f'./destination/{file}')

这会将 600 个文件复制到当前目录中名为“destination”的目录中。

【讨论】:

  • 你能提供shutil.copy()的确切语法吗?
  • jsut 从您在编辑中提供的代码中删除 *
【解决方案2】:

os.listdir(path) 将列出您正在搜索的目录中的文件和子目录。

我假设你的所有文件都是.jpg,所以我会使用glob 模块。

import glob
path = "D:Pictures\*.jpg"
destination = r"E:\new_pictures\\"
files = glob.glob(path)

for f in sorted(files)[:600]:
    shutil.copy(f, destination)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2015-12-24
    相关资源
    最近更新 更多