python - 从 Python 中的一小组可能文件名中确定正确文件名的好方法
问题描述
我有一个用于 GUI 的 python 项目,可与我们计算集群中的 slurm 排队管理器一起使用。我可以做的一件事是在文本窗口中打印特定作业的某些文件的内容。
但是,人们用于相同类型文件的扩展名有时会发生变化。我可以对其进行编程,使其适合我,但我也希望能够查找其他人的文件。
我解决这个问题的方法如下
extensions = [".ex1", ".ext2", "ext3"]
for ext in extensions:
try:
f = open(jobname+ext), "r")
content = f.read()
f.close()
<doing some stuff with content>
except IOError:
if ext == extensions[-1]:
print("File not found")
return
如果实际使用的扩展名被 覆盖extensions
,那么我的代码会找到它。我想知道更有经验的程序员是否有更好/更优雅/更有效的方法。幸运的是,要读取的文件非常小,因此遍历所有可能性不会花费太多时间。但这种特殊的解决方案可能不适用于其他情况。
解决方案
据我了解这个问题,您已经知道文件名和路径,只有扩展名是未知的。使用该glob
包查找具有该名称的所有文件,如下所示:
from glob import glob
matches = glob("/path/to/files/knownfilename.*")
if not matches:
print("File not found!")
return
try:
with open(matches[0], "r") as f:
content = f.read()
# do stuff
except IOError:
print("Error reading file {}".format(matches[0]))
在这种情况下,您可能必须处理以下可能性
- 有多个具有该名称和不同扩展名的文件
- 列表中的第一个文件
matches
不是您想要的文件类型(可能是带有 .bak 扩展名的备份文件或其他文件),因此您可能还想将某些扩展名列入黑名单
推荐阅读
- javascript - 返回(或映射)Javascript + React后添加类
- arrays - 动态分配二维字符数组,并创建自身的副本
- makefile - 忍者:错误:build.ninja:6:预期的“命令=”行
- r - BlueSky Statistics (Open Source 64bit) v7.20 error "could not find function "BSkyOpenNewDataset"
- ios - Flutter ios“无法为模拟器构建应用程序。”
- reactjs - 在 React Native 中编辑/处理音频的最佳方法是什么?
- html - Flex-wrap:nowrap 无法正常工作
- php - 将文本字段转换为选择字段下拉列表
- javascript - 通过控制台访问变量和客户端函数
- flutter - 在颤振中创建具有可选参数的自定义类时出错