【问题标题】:Create a folder structure based on information from a dataframe根据数据框中的信息创建文件夹结构
【发布时间】:2021-01-05 00:40:24
【问题描述】:

我有这个数据框 train_info,其中包含 423 位不同的艺术家和与绘画图像相对应的文件名。

    artist             filename
0   Hiroshige          53180.jpg
1   Ivan Aivazovsky    99442.jpg
2   Hiroshige          23508.jpg
3   Hieronymus Bosch   82352.jpg
4   Hiroshige          27254.jpg
... ... ... ... ...
128069  Frans Snyders   14264images161.jpg
128070  Frans Snyders   14260images158.jpg
128071  Frans Snyders   14274images170.jpg
128072  Frans Snyders   14355images90.jpg
128073  Frans Snyders   14270images167.jpg

然后我有一个文件夹 - 绘画 - 包含所有这些图像。

我想要做的是创建另一个文件夹 - train - 每个艺术家都有子文件夹,每个子文件夹应该包含与每个艺术家对应的所有图像。

像这样:

-train
    -Hiroshige
         -53180.jpg
         -23508.jpg
         -27254.jpg
         ...
    -Ivan Aivazovsky
         -99442.jpg
         ...
    -Frans Snyders
         -14264images161.jpg
         -14260images158.jpg
         -14274images170.jpg
         -14355images90.jpg
         -14270images167.jpg
         ...

很遗憾,我不知道如何解决这个问题。

【问题讨论】:

  • 我不知道如何解决这个问题。你能彻底解决这个问题吗?
  • 是的,我本可以编写一些伪代码。但我认为这对任何回答的人都没有帮助。
  • 这可能对我们和你都有帮助。
  • 好的,我下次会这样做(因为我已经得到了这个问题的答案)

标签: python pandas dataframe file data-science


【解决方案1】:

一种简单、省力的方法是使用显式循环:

import os
import shutil

srcdir = 'Paintings'
dstdir = 'train'

for name, s in df.groupby('artist')['filename']:
    artistdir = os.path.join(dstdir, name)
    print(f'copying {s.shape[0]} images from {srcdir} to {artistdir}')
    os.makedirs(artistdir, exist_ok=True)
    for filename in s:
        shutil.copy(os.path.join(srcdir, name), os.path.join(artistdir, name))

输出:

copying 1 images from Paintings to train/Hieronymus Bosch
copying 3 images from Paintings to train/Hiroshige
copying 1 images from Paintings to train/Ivan Aivazovsky
...

有更快的方法(就 pandas 操作而言),但这里 copy 本身就相形见绌了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2020-01-24
    • 2021-07-13
    相关资源
    最近更新 更多