Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在正则表达式中循环列表_Python_Regex_Python 2.7_For Loop - Fatal编程技术网

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

Python-在正则表达式中循环列表,python,regex,python-2.7,for-loop,Python,Regex,Python 2.7,For Loop,好的,我对Python比较陌生,您可能会在我的代码中看到,但是有没有办法在正则表达式中遍历列表 基本上,我在一个文件夹中循环遍历每个文件名,从文件名中获取一个代码(2-6位),我想将其与文本文件中的代码列表进行比较,文本文件中附加了一个名称,格式为“1234_name”(不带引号)。如果两个列表中都有代码,我想打印出列表条目,即1234_Name。目前,我的代码似乎只查看文本文件列表中的第一个条目,我不知道如何让它查看所有条目以找到匹配项 import os, re sitesfile = o

好的,我对Python比较陌生,您可能会在我的代码中看到,但是有没有办法在正则表达式中遍历列表

基本上,我在一个文件夹中循环遍历每个文件名,从文件名中获取一个代码(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

希望这是有意义的-提前感谢

因此,请使用以下代码:

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.txt',r')作为f的
:
行=[x.split(“”“)[0]表示f.readlines()中的x
打印输出=[]
对于定位(,)中的f:
如果f在行中:打印输出。追加(f)
打印(打印输出)

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

是否匹配
fnmatch.filter
接受正则表达式?我以为它只接受unix风格的globs。啊,你说得对。从我的funcs.py中挖掘出来:)我仍然认为这对他想做的事情有用,只是格式略有不同。在这里查看可接受的模式匹配,我似乎无法在字符串列表中添加任何内容。当我在寻找数字时,“[0123456789]”不应该工作吗?很抱歉,我仍然没有得到任何附加到打印出来的内容。我觉得我已经尝试了所有的组合。您是否介意建议它应该是什么样子,特别是正则表达式应该搜索什么字符串?为自己的愚蠢道歉。没问题。男人:)拍一张文件夹的截图,或是一些你想要的文件,与里面你不想要的文件相匹配,我们可以拿出一个正则表达式。可能还包括一个文件样本,其中包含可接受的编号。然后我们可以清理你的“是吗,不是吗”逻辑,让它工作。你可以使用pastebin或向我发送电子邮件blakev@null.net