Python如何读取目录中文件名以指定前缀列表中前缀开头的文件
解决思路与修改后的代码
原来的代码逻辑错误(或报错)是因为当prefix变为列表后,prefix in filename会试图判断整个列表是否是文件名的子串,这完全不符合需求。我们需要修改前缀匹配逻辑,同时修正代码里的其他小问题:
关键修改点
- 前缀匹配逻辑:把
if prefix in filename改成if filename.startswith(tuple(prefix))。str.startswith()方法支持传入元组,会自动检查文件名是否以元组中的任意一个前缀开头,正好满足需求。 - 路径转义修复:将路径写成原始字符串
r'Data\Input_data',避免Windows路径中的\被当成转义字符引发问题。 - 列表初始化优化:原来的
df初始为None,后续赋值为字符串再调用append会报错,直接初始化为空列表df = [],代码更简洁且逻辑正确。
修改后的完整代码
import os if dev: print('Reading files from downloaded data') df = [] dir_path = r'Data\Input_data' for filename in os.listdir(dir_path): if filename.startswith(tuple(prefix)): print('using downloaded file', filename) df_file = os.path.join(dir_path, filename) df.append(df_file)
补充说明
如果你的prefix列表特别长,或者需要更灵活的匹配规则,也可以用生成器表达式结合any()实现,效果和startswith一致:
if any(filename.startswith(p) for p in prefix):
不过startswith(tuple(prefix))是Python内置的优化实现,性能会更好一些。
内容的提问来源于stack exchange,提问作者Kishu P
相关产品推荐
相关产品推荐

