【问题标题】:Select files within list of files imported with glob在使用 glob 导入的文件列表中选择文件
【发布时间】:2019-11-04 16:45:32
【问题描述】:

我正在使用以下代码导入带有 glob 的文件列表:

fileList = glob.glob('./final_clim/*.shp')

然后我需要循环选择某些文件并循环运行这些文件。我曾尝试编辑字符串或使用列表理解,但文件名中有 2 组数字,无法弄清楚如何执行此操作。示例文件名是:

gla14_eco_23_clim_23

gla14_eco23_clim_24

gla14_eco24_clim_23

所以我需要将所有“eco23”文件组合在一起,以便运行一些代码,然后运行“eco24”,但我有数百个“ecos”,所以不能手动拆分。

我试过了:

for file in fileList:
    eco = [f for f in fileList if ("eco_23", f)

我尝试过使用 re.findall,但无法完全解决

我也试过了:

for file in fileList:
    hd, tl = path.split(file)
    name = tl.replace('gla14_eco_', "") etc..

我似乎不知道该怎么做。我可能会使用 dict 用字母替换最后两个数字,以使这更容易?有人可以帮忙吗?

【问题讨论】:

    标签: python file glob


    【解决方案1】:

    我相信你的列表理解需要更正。

    for i in range(0,825):
        eco = [f for f in fileList if 'eco_'+str(i)+'_' in f]
    

    【讨论】:

    • 非常感谢,如何将 '23' 替换为 0 到 824 之间的每个数字?为了澄清我的代码,需要选择所有带有 eco_23 的文件并运行一些代码,然后是所有带有 eco_24 的文件,然后是 eco_25 等等......
    • @HeatherKay :我已经编辑了我对您的新要求的回答。有帮助吗?
    • 非常感谢,会玩一下看看,有什么问题会告诉你的。
    • 当我运行它时,“if 'eco_'+str(i)”部分正在拾取单个整数。例如,它将为 i=2 拾取 eco_2、eco_12、eco_23、eco_24、eco_251、eco_342 等
    • 是的,这似乎适用于我选择的较小的文件。再次感谢,我只是一个初学者,很高兴看到它的工作原理。
    【解决方案2】:

    如果你知道所有的 eco23 等,你可以循环使用这个:

    for i in range(0,825):
        fileList = glob.glob('./final_clim/*eco_'+str(i)+'*.shp')
    

    【讨论】:

    • 重点是我有几百个eco文件。我需要加载所有 eco_23 并运行一些代码,然后是所有 eco_24,然后是所有 eco_25 等,从 0 到 826。我不想重写我的代码 826 次。
    • 是的,但与 nitin3685 的回答一样,您只需稍作改动即可实现这一目标。就个人而言,我觉得这更容易理解!
    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 2019-08-25
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多