根据数据框中的信息创建文件夹结构
Create a folder structure based on information from a dataframe
我有这个数据框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
...
不幸的是,我不知道如何解决这个问题。
一种简单、省力的方法是使用显式循环:
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
本身就使那个时间相形见绌了。
我有这个数据框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
...
不幸的是,我不知道如何解决这个问题。
一种简单、省力的方法是使用显式循环:
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
本身就使那个时间相形见绌了。