首页 > 解决方案 > 从 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,那么我的代码会找到它。我想知道更有经验的程序员是否有更好/更优雅/更有效的方法。幸运的是,要读取的文件非常小,因此遍历所有可能性不会花费太多时间。但这种特殊的解决方案可能不适用于其他情况。

标签: python

解决方案


据我了解这个问题,您已经知道文件名和路径,只有扩展名是未知的。使用该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 扩展名的备份文件或其他文件),因此您可能还想将某些扩展名列入黑名单

推荐阅读