排除特定文件的模式
pattern to exclude specific files
我正在尝试创建正则表达式,它将列出某些目录中的所有 .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:预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真。汇总数据:b'没有文件匹配模式:../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、 而非 正则表达式的字符串或字符串列表。
另见 filename matching。
使用 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)]
我正在尝试创建正则表达式,它将列出某些目录中的所有 .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:预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真。汇总数据:b'没有文件匹配模式:../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、 而非 正则表达式的字符串或字符串列表。
另见 filename matching。
使用 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)]