我正在尝试创建regex,它将列出所有.jpg
在一些目录中,除了少数文件(静态,而不是模式)。
所以,我写了这个:(Python)
"^(?!358097_sat!823133_sat!140860_sat).*jpg$"
"^(?!358097_sat|823133_sat|140860_sat).*jpg$"
我想列出所有JPEG文件,除了:
- 358097 _sat
- 823133 _sat
- 140860 _sat
但是它给了我一个错误,说没有找到匹配这个模式的文件
下面是完整的字符串和错误信息:
No files matched pattern: ../input/dataset/valid/^(?!358097_sat!823133_sat!140860_sat).*jpg$
我实际上是把这个正则表达式传递给一个tf函数:
tf.data.Dataset.list_files(dataset_path + val_data + "^(?!358097_sat|823133_sat|140860_sat).*jpg$", seed=SEED)
# dataset_path = "../input/dataset/"
# val_data = "valid/"
完全错误:
*InvalidArgumentError: Expected 'tf。张量(False, shape=(), dtype=bool)'为真。汇总数据:b' ' no files matched pattern: ../input/dataset/valid/^(?!358097_sat|823133_sat|140860_sat).jpg$'
下面是函数参考:https://www.tensorflow.org/api_docs/python/tf/data/Dataset#list_files
静态方法list_files
需要一个包含globs的字符串或字符串列表,而不是正则表达式。参见文件名匹配。
文件名匹配使用globs没有办法否定匹配。因此,您必须编写一个自定义函数来完成此操作。
你可以使用例如glob.glob()
来生成一个JPEG文件列表,然后过滤掉那些匹配你的字符串。
ignore = ("358097_sat", "823133_sat", "140860_sat")
files = [f for f in glob.glob("*.jpg") if not any(j in f for j in ignore)]