繁体   English   中英

排除特定文件的模式

[英]pattern to exclude specific files

我正在尝试创建正则表达式,它将列出某些目录中的所有.jpg ,除了几个文件(静态,不是模式)。

所以,我写了这个:(Python)

"^(?!358097_sat!823133_sat!140860_sat).*jpg$"
"^(?!358097_sat|823133_sat|140860_sat).*jpg$"

我想列出所有 JPEG 文件,除了:

  • 358097_卫星
  • 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:预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真。 汇总数据:b'没有文件匹配模式:../input/dataset/valid/^(?.358097_sat|823133_sat|140860_sat)。 jpg$'

这是 function 参考: https://www.tensorflow.org/api_docs/python/tf/data/Dataset#list_files

static 方法list_files需要一个包含globs的字符串或字符串列表,而不是正则表达式。 另请参阅 文件名匹配

使用globs的文件名匹配无法否定匹配。 所以你必须写一个自定义的 function 来做到这一点。

您可以使用例如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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM