Python - 在正则表达式中循环遍历列表

时间:2013-08-28 22:09:51

标签: python regex python-2.7 for-loop

是的,我对Python很新,你可能会在我的代码中看到它,但有没有办法在regex中迭代列表?

基本上,我循环遍历文件夹中的每个文件名,从文件名中获取代码(2-6位),并且我想将其与文本文件中的代码列表进行比较,附加名称,格式为“1234_Name”(不带引号)。如果代码存在于两个列表中,我想打印出列表条目,即1234_Name。目前我的代码似乎只是查看文本文件列表中的第一个条目,我不知道如何让它看起来全部找到匹配。

import os, re

sitesfile = open('C:/Users/me/My Documents/WORK_PYTHON/Renaming/testnames.txt', 'r')
filefolder = r'C:/Users/me/My Documents/WORK_PYTHON/Renaming/files/'

sites = sitesfile.read()
site_split = re.split('\n', sites)


old = []
newname = []

for site in site_split:
    newname.append(site)


for root, dirs, filenames in os.walk(filefolder):
    for filename in filenames:
        fullpath = os.path.join(root, filename)
        filename_split = os.path.splitext(fullpath) 
        filename_zero, fileext = filename_split
        filename_zs = re.split("/", filename_zero)
        filenm = re.search(r"[\w]+", str(filename_zs[-1:]))#get only filename, not path
        filenmgrp = filenm.group()

        pacode = re.search('\d\d+', filenmgrp)
        if pacode:
            pacodegrp = pacode.group()
            match = re.match(pacodegrp, site)
            if match:
                 print site

希望这是有道理的 - 非常感谢!

1 个答案:

答案 0 :(得分:0)

所以,请改用此代码:

import os
import re
def locate(pattern = r'\d+[_]', root=os.curdir):
    for path, dirs, files in os.walk(os.path.abspath(root)):
        for filename in re.findall(pattern, ' '.join(files)):
            yield os.path.join(path, filename)

..这只会返回与给定正则表达式模式匹配的文件夹中的文件。

with open('list_file.txt', 'r') as f:
     lines = [x.split('_')[0] for x in f.readlines()]

print_out = []

for f in locate(<your code regex>, <your directory>):
    if f in lines: print_out.append(f)

print(print_out)

...首先在list_file中找到有效代码,然后将返回的文件与给定的正则表达式进行比较。