tensorflow python在文件名中找到最大的数字

t3psigkw  于 2023-05-01  发布在  Python
关注(0)|答案(2)|浏览(139)

在一堆文件名中,我需要找到最大的数字。

  • model_dir.glob('weights_epoch_.tf.index') 返回一个生成器,但是然后呢?
/home/rac/amf9-horizon/weights_epoch_1.tf.index
/home/rac/amf9-horizon/weights_epoch_10.tf.index
/home/rac/amf9-horizon/weights_epoch_15.tf.index
/home/rac/amf9-horizon/weights_epoch_2.tf.index
/home/rac/amf9-horizon/weights_epoch_20.tf.index
/home/rac/amf9-horizon/weights_epoch_25.tf.index
/home/rac/amf9-horizon/weights_epoch_3.tf.index
/home/rac/amf9-horizon/weights_epoch_30.tf.index
/home/rac/amf9-horizon/weights_epoch_35.tf.index
/home/rac/amf9-horizon/weights_epoch_4.tf.index
/home/rac/amf9-horizon/weights_epoch_40.tf.index
/home/rac/amf9-horizon/weights_epoch_45.tf.index
/home/rac/amf9-horizon/weights_epoch_46.tf.index
/home/rac/amf9-horizon/weights_epoch_47.tf.index
/home/rac/amf9-horizon/weights_epoch_48.tf.index
/home/rac/amf9-horizon/weights_epoch_49.tf.index
/home/rac/amf9-horizon/weights_epoch_5.tf.index
/home/rac/amf9-horizon/weights_epoch_6.tf.index
/home/rac/amf9-horizon/weights_epoch_7.tf.index
/home/rac/amf9-horizon/weights_epoch_8.tf.index
/home/rac/amf9-horizon/weights_epoch_9.tf.index

返回int(49).

jjhzyzn0

jjhzyzn01#

像这样的东西会工作。

file_names = model_dir.glob('weights_epoch_*.tf.index') 
largest = max(map(lambda x: int(re.findall(r'(\d+)\.tf\.index', x)[0]), file_names))
print(largest) # 49

使用内置的map对每个file_names应用正则表达式来提取数字,然后调用max来提取最大的数字。

编辑

由于该方法返回PosixPath的可迭代对象,因此需要首先将对象强制转换为str
举个例子

largest = max(map(lambda x: int(re.findall(r'(\d+)\.tf\.index', str(x))[0]), file_names))
ckocjqey

ckocjqey2#

可能有更优雅的方法,但一种方法是用分隔符“/”分割从glob返回的每个路径,选择最后一个元素并过滤掉所有非数字字符。然后将这些字符串转换为int并查找最大值。就像这样:

paths = glob('weights_epoch_*.tf.index')
max_epoch = max([int(''.join(filter(str.isnumeric, i.split("/")[-1]))) for i in paths])

相关问题