与fnmatch匹配的文件名

2024-06-28 19:50:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个目录,文件格式为:LnLnnnnLnnn.txt

其中L=字母,n=数字。E、 g:p2c0789c001.txt

我想根据第二个编号(即0789)是否在某个编号序列内(例如0001到0146)将这些文件分开。在

用fnmatch有没有一种简单的方法来实现这一点?还是应该使用regex?在

这是我目前掌握的代码:

out_files = []
for root, dirs, filenames in os.walk('.'):
   for filename in fnmatch.filter(filenames, '???[0-9][0-9][0-9][0-9]????*.txt'):
       out_files.append(os.path.join(root, filename))

Tags: in目录txtforos字母数字root
3条回答

fnmatch.filter()内无法轻松完成,但您可以自己完成:

out_files = []
for root, dirs, filenames in os.walk('.'):
   for filename in fnmatch.filter(filenames, '???[0-9][0-9][0-9][0-9]????*.txt'):
       if(1 <= int(filename[3:7]) <= 146):
           out_files.append(os.path.join(root, filename))

或者,对于列表理解粉丝:

^{pr2}$

编辑:天哪,忘了一个额外的for循环。另外,看看这是否有更好的性能。在

EDIT2:如果第一个字母是c,则检查第二个到最后一个元素,该元素基于两个备选方案的标准,保证存在。在

out_files = []
for root, dirs, filenames in os.walk('.'):
    for filename in filesnames:
        try:
            if  1 <= int(filename.split('c')[-2]) <= 146:
                out_files.append(...)
        except IndexError:
            continue

或者,使用发电机:

^{pr2}$

如果在字符串的开头或数字更改前的字符串长度处有其他c's

if 1 <= int(re.findall(r"c([0-9]+)c", s)[0]) <= 487

或者如果总有四个数字:

if 1 <= int(re.findall(r"c(\d{4})c", s)[0]) <= 487:

相关问题 更多 >