使用 glob 查找任意长度的数字
Use glob to find arbitrary length numbers
我正在寻找 glob 模式,它可以找到包含模式 myfile_[SomeNumber].txt
的所有文件
我天真的尝试是
glob.glob("myfile_[0-9]*.txt")
但这也会找到 myfile_[SomeNumber][AnyStuff].txt
形式的所有文件
这个答案展示了如何在固定长度上做到这一点,但在这种情况下这不是我想要的。
use python glob to find a folder that is a 14 digit number
您可能混淆了正则表达式语法和 glob 结构。 [0-9]*
在 globbing 中意味着 "a single digit followed by zero or more of any character"。所以删除 *
.
在 extended globbing 中有一个 "one or more" 的限定符,但是 glob
不支持,所以别无选择,只能使用正则表达式,即做你自己的文件名模式匹配。有几种方法可以做到这一点,这里是一种:
import os
import re
files = []
for fname in os.listdir('.'):
if re.match(r"myfile_[0-9]+.txt", fname):
files.append(fname)
print files
请注意,RE 与您的不完全相同,我使用 +
表示 "one of more of the preceding pattern",*
表示 "zero or more" - 所以数字会是可选的,这可能是你想要的(我不确定)。
大部分代码可以作为列表理解来完成,但这可能会降低一些可读性:
files = [fname for fname in os.listdir('.')
if re.match(r"myfile_[0-9]+.txt", fname)]
我正在寻找 glob 模式,它可以找到包含模式 myfile_[SomeNumber].txt
我天真的尝试是
glob.glob("myfile_[0-9]*.txt")
但这也会找到 myfile_[SomeNumber][AnyStuff].txt
这个答案展示了如何在固定长度上做到这一点,但在这种情况下这不是我想要的。 use python glob to find a folder that is a 14 digit number
您可能混淆了正则表达式语法和 glob 结构。 [0-9]*
在 globbing 中意味着 "a single digit followed by zero or more of any character"。所以删除 *
.
在 extended globbing 中有一个 "one or more" 的限定符,但是 glob
不支持,所以别无选择,只能使用正则表达式,即做你自己的文件名模式匹配。有几种方法可以做到这一点,这里是一种:
import os
import re
files = []
for fname in os.listdir('.'):
if re.match(r"myfile_[0-9]+.txt", fname):
files.append(fname)
print files
请注意,RE 与您的不完全相同,我使用 +
表示 "one of more of the preceding pattern",*
表示 "zero or more" - 所以数字会是可选的,这可能是你想要的(我不确定)。
大部分代码可以作为列表理解来完成,但这可能会降低一些可读性:
files = [fname for fname in os.listdir('.')
if re.match(r"myfile_[0-9]+.txt", fname)]