在python中根据文件名查找文件

2024-05-14 01:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个文件夹,其中有a.shp或b.shp,还有一些其他杂项文件。或者,一个文件夹可以同时包含a.shp和b.shp。在这种情况下,我想选择a.shp。如果一个文件夹没有这两个文件,我将从分析中排除该文件夹。在

我必须编写如下python代码:

 if folder1 has a.shp only:
    myunit = r"D:\folder1\a.shp"
 elif folder2 has b.shp only:
    myunit = r"D:\folder2\b.shp"
 elif folder3 has a.shp and b.shp:
    myunit = r"D:\folder3\a.shp"
 elif folder4 doesn't have a.shp and b.shp:
    Don't assign anything into myunit.

如果有人能就如何在Python中实现这一点提供建议,我将非常感谢。在

谢谢。在


Tags: and文件代码文件夹onlyif情况杂项
3条回答

如果你想避免导入os.path.exists这样,你可以使用try/catch逻辑。如果a在那里,你总是想要它,所以你可以试着打开它。如果不起作用,捕获错误并尝试打开b。如果不起作用,则捕获错误并忽略该文件夹。在

来自docs(ctrl+f表示“异常”)的代码段,显示了建议的方法:

def get_status(file):
    try:
        return open(file).readline()
    except EnvironmentError as err:
        print "Unable to open file: {}".format(err)
        sys.exit(1)

同样来自文档,一个片段显示了操作系统路径正如Gareth所描述的:

^{pr2}$

但文件引用这段话是为了反对它。Python故意提供优雅的异常处理;在执行之前,利用这一点比担心C风格的偏执检查更为惯用。如果你想这么做操作系统路径不管怎样,不管怎样。不管怎样都可以。在

听起来好像您想要os.path.exists,它以路径名作为参数,根据存在的文件(或目录)的名称返回True或{}。您可能还需要os.path.join来构造文件名。在

我认为你的代码与你的问题描述不一致。 我假设问题描述正确,因此我创建了一个函数来过滤您需要的dir:

import os

def filter_dirs(dirs=[]):
    result = []
    for dir in dirs:
        files = os.listdir(dir)
        file_a = 'a.shp' in files
        file_b = 'b.shp' in files
        if file_a or file_b:
            result.append({'dir':dir, 'file_a':file_a, 'file_b':file_b})
    return result

然后使用一些文件夹尝试该函数并查看结果:

^{pr2}$

相关问题 更多 >