我有一个用于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的备份文件或其他),因此您可能还希望将某些扩展名列入黑名单

关于python - 从一小部分可能的Python文件名中确定正确文件名的好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55399204/

10-11 22:57
查看更多