python f-string在制作文件列表时包括除0之外的所有数字

问题描述

我想用 extend() 创建一个文件列表,同时忽略 _file0.h5 中以 0 结尾的任何文件名。我有这一行将所有文件连接到一个列表中

data_files_0.extend(sorted(glob(f"{directory}*_file{filenum}.h5") ) ) 

我正在尝试学习如何在这里实现正则表达式,我尝试过

    filenum = re.match(r'[^0]')

把它放在给出错误的上一行之上 TypeError: match() missing 1 required positional argument: 'string'

在这里很困惑,所有带有正则表达式的 f-string 示例都对我没有帮助。

解决方法

re.match 不会自动查找包含该模式的字符串——你必须向它提供字符串——这就是缺少参数错误的原因。 示例 - re.match('[^0]',"abc0123") 将根据模式“[^0]”检查字符串“abc0123”中的匹配项。

[^0] 在这里可能是错误的模式,因为它匹配字符串中除 0 之外的任何位置的任何字符。您可能想要使用类似 .*0\.h5 的东西,它匹配任何以 '0.h5' 结尾的字符串。您还可以查看 regexr.com,这是一个非常有用的网站,可以帮助您了解正则表达式模式的一般工作原理。

对于问题的另一部分 - 查找文件 - 您可能只需要先获取所有文件名,然后检查哪些文件名以 0 结尾:

all_files = glob(f"{directory}*_file*.h5")
for f in all_files: 
    if not re.match('.*0\.h5',f):
        data_files_0.append(f)