Python:打开所有不匹配模式的文件

1 投票
3 回答
2300 浏览
提问于 2025-04-26 18:38

我想打开一个文件夹里所有不符合某个模式的文件。这个文件夹里会有像 x_0192910y_18329123z_00000000 这样的文件;我想打开所有不以 '00000000' 结尾的文件,也就是不以八个零结尾的文件。我试着用 glob.glob() 来实现,但我不知道怎么写正则表达式。我试过 *^0{8,8}*[!0] 这样的写法,但我不太确定怎么构造正确的表达式。

所以总结一下,我只需要类似 glob.glob('not *_00000000') 这样的东西。有没有人能帮帮我?

暂无标签

3 个回答

0

通配符和正则表达式是完全不同的东西。

你能做到的最接近的事情可能就是“最后8个字符里没有‘0’”。如果这个方法不够好,那你就只能获取完整的列表,然后用 endswith 来筛选。

顺便说一下,通配符的规则是:

* match 0 or more "any character"
? match exactly one "any character"
[...] match character range
[!...] negated character range (all but the chars in the range
0

你有没有想过对glob返回的列表进行筛选呢?比如说:

for e in glob.glob('*'):
    if e[-9:] == "_00000000":
        continue
    # Do whatever you like
0

你可以使用 `endswith` 和 `filter` 来实现这个功能:

import glob
for i in filter(lambda x:not x.endswith('_00000000'), glob.glob('*.*')):
    print i

你也可以使用列表推导式来完成:

import glob
for i in [e for e in glob.glob('*.*') if not e.endswith('_00000000')]:
    print i

撰写回答