python - Python循环遍历一批文件
问题描述
我想遍历一批文件,以便一次获取每个子目录的 32 张图像(由于内存,我无法加载所有图像)例如加载每个目录的 img 1-32 使用它们,然后加载 img 33- 64 然后 65-96 等
我的目录:
Rootdir
- dir1
- img 1
- img 2
- img...
- dir2
- img 5000001
- img 5000002
- img...
- dir3
- img 10000001
- img 10000002
- img...
所以我需要在第一个循环中加载 img1,2,..,32, 5000001,...5000032, 1000001,...10000032 然后是 img33,34,..,64, 5000033,...5000064, 1000033, ...10000064 在第二个循环
有没有办法正确地做到这一点?
我正在尝试使用 os.walk,它允许我遍历我的目录,但我不知道如何使这个循环适应我需要的 32 个批次?
for dirName, subdirList, fileList in os.walk(rootdir):
print('Found directory: %s' % dirName)
for fname in sorted(fileList):
img_path = os.path.join(dirName, fname)
try:
img = load_img(img_path, target_size=None)
imgs.append(img)
except Exception as e:
print(str(e), fname, i)
#do something on imgs
编辑
你所有的评论都让我得到这样的东西:
dir1/img1.jpg 到 dir1/img32.jpg 然后 dir1/img33.jpg 到 dir1/img64.jpg 然后 ...
然后 dir2/img1.jpg 到 dir1/img32.jpg 然后 dir2/img33.jpg 到 dir2/img64.jpg 然后...
然后 dir3/img1.jpg 到 dir3/img32.jpg 然后 dir3/img33.jpg 到 dir3/img64.jpg :(
我想要实现的是:
dir1 numero 1 到 32 的文件 + dir2 numero 1 到 32 的文件 + dir3 numero 1 到 32 的文件然后
dir1 numero 33 到 64 的文件 + dir2 numero 33 到 64 的文件 + dir3 numero 33 到 64 的文件在同一个循环中
解决方案
os.walk已经返回了一个生成器,它将即时生成一个 3 元组 (dirpath, dirnames, filenames) 值,因此您只需要以 32 个批次生成文件名数组的切片。
这是一个例子:
import os
# Your root directory path
rootdir = r"Root"
#Your batch size
batch_size = 32
def walk_dirs(directory, batch_size):
walk_dirs_generator = os.walk(directory)
for dirname, subdirectories, filenames in walk_dirs_generator:
for i in range(0, len(filenames), batch_size):
# slice the filenames list 0-31, 32-64 and so on
yield [os.path.join(dirname, filename) for filename in filenames[i:i+batch_size]]
# Finally iterate over the walk_dirs function which itself returns a generator
for file_name_batch in walk_dirs(rootdir, batch_size):
for file_name in file_name_batch:
# Do some processing on the batch now
print (file_name)
pass
推荐阅读
- c++ - 使用递归回溯的 C++ 数独求解器不起作用
- wordpress - .htaccess 301 带有查询字符串和特殊字符
- r - 如何用三个分类变量进行方差分析?
- batch-file - 使用模式命令调整大小命令提示符清除整个屏幕
- amazon-web-services - AWS Cognito 在首次登录时未提示 MFA
- reactjs - React Graphql Typescript 文件设置
- django - 在 django 模型中保存一个带有前缀和主键的字符字段列?
- c++ - 函数定义/实现的返回值范围内的私有是什么意思(c++)?
- python - DEAP:使突变概率取决于代数
- php - Craft - 动态添加电子邮件收件人错误