更新日期:
基本上,我想将一个大文件夹分为2组。大文件夹由120个子文件夹组成。一个示例子文件夹名称将是*n 02085620-奇瓦瓦州***。n 02085620-Chihuahua有152个.jpg文件。一个示例文件将是n02085620_7.jpg**。您可以看到n 02085620是相同的。sample_submission.csv
中给出了应转到组#1的文件名。其他文件应始终转到组#2。每个文件应位于其各自的母文件夹中。
初始职位:
我想将8580个.img文件复制到120个文件夹中。
我使用shutil来实现这一点。我的主文件夹是source = '/Users/turuud/Desktop/TUT/Dscience_exp/Images/'
,而我的目标文件夹看起来像这样:test_path = '/Users/turuud/Desktop/TUT/Dscience_exp/test/'
目标文件夹应该包括120个子文件夹。我使用os.path.join来实现这一点。
问题是,我没有得到120个包含嵌入式图像的目录,而是得到了120个不能按原来方式使用的二进制文件。
下面是完整的代码:
import os
import csv
import shutil
source = '/Users/turuud/Desktop/TUT/Dscience_exp/Images/'
testcsv = '/Users/turuud/Desktop/TUT/Dscience_exp/sample_submission.csv'
test_path = '/Users/turuud/Desktop/TUT/Dscience_exp/test/'
with open(testcsv, 'r') as file:
csvreader = csv.reader(file)
next(csvreader)
for row in csvreader:
for directory in os.listdir(source):
if os.path.isdir(os.path.join(source, directory)):
for img_file in os.listdir(os.path.join(source, directory)):
if str(row[0]) == str(img_file):
print(f"{row[0]} and {img_file} are exactly same")
shutil.copy(os.path.join(source, directory, img_file), os.path.join(test_path, directory))
第一次
在文件夹“test”中,我想有包含各自文件的目录。没有二进制文件。
这是代码最后一行的结果:
shutil.copy(os.path.join(source, directory, img_file), os.path.join(test_path, directory))
被更改为
shutil.copy(os.path.join(source, directory, img_file), test_path)
click here
我想把它们放在它们的母文件夹里。
1条答案
按热度按时间zxlwwiss1#
我会从简化任务开始。假设我们有下一个文件结构:
rules.csv
有下一个内容:我们的python脚本应该创建文件夹
result
,其中包含两个子文件夹group_1
和group_2
,结构如下:要实现这一点,我们首先需要加载CSV并保存每一行的第一列 (即文件名),我将使用
set
作为容器。然后我们需要遍历源文件夹的子文件夹,并将CSV中存在的文件名保存到 group_1 文件夹,其他文件名保存到 group_2 文件夹。您也可以使用
.glob()
来查找所有的.jpg
文件,如果深度可以超过2: