Python中如何循环处理带数字后缀的SpecFiles变量读取二进制文件?
解决方案
首先不建议单独定义SpecFiles_1到SpecFiles_10这种离散变量,后续循环处理会很麻烦。推荐先把这些Series统一放到列表或字典里,再批量处理:
方法一:用列表统一管理(推荐)
# 把所有SpecFiles系列存入列表,按顺序对应1到10 spec_files = [SpecFiles_1, SpecFiles_2, SpecFiles_3, SpecFiles_4, SpecFiles_5, SpecFiles_6, SpecFiles_7, SpecFiles_8, SpecFiles_9, SpecFiles_10] # 存储所有文件对象的列表,file_ids[0]对应原来的FileId_1,以此类推 file_ids = [] # 循环处理每个SpecFiles系列 for sf in spec_files: current_group = [] # 遍历当前系列里的每个文件名,打开二进制文件 for filename in sf: current_group.append(open(filename, 'rb')) file_ids.append(current_group)
之后你可以通过file_ids[0][0]访问原来FileId_1[0]对应的文件对象,和你的需求完全匹配。
方法二:用字典对应编号(更直观)
如果想保留1-10的编号关联,可以用字典:
spec_files_dict = { 1: SpecFiles_1, 2: SpecFiles_2, # ... 依次添加到10 10: SpecFiles_10 } file_ids_dict = {} for num, sf in spec_files_dict.items(): # 按编号存储对应组的文件对象 file_ids_dict[num] = [open(filename, 'rb') for filename in sf]
使用时通过file_ids_dict[1][0]访问FileId_1[0]的文件对象。
重要提醒
- 用完文件后一定要记得关闭,避免资源泄漏:
# 关闭所有文件对象 for group in file_ids: for f in group: f.close()
- 如果只是读取文件内容后不需要保留文件对象,更推荐用
with语句自动管理文件(更安全):
for sf in spec_files: for filename in sf: with open(filename, 'rb') as f: content = f.read() # 在这里编写处理文件内容的代码
不推荐的方法(直接遍历离散变量)
如果实在不想修改现有变量定义,可以通过locals()获取变量,但这种方式容易出错,不建议长期使用:
file_ids = {} for i in range(1, 11): sf = locals().get(f'SpecFiles_{i}') if sf: file_ids[f'FileId_{i}'] = [open(filename, 'rb') for filename in sf]
内容的提问来源于stack exchange,提问作者Dhyana
相关产品推荐
相关产品推荐

