模式来排除特定的文件



我正在尝试创建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)]

相关内容

  • 没有找到相关文章

最新更新