在python中使用匹配关键字搜索并返回文件中的行

2024-10-02 10:28:16 发布

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

我用regex在从文件中提取的行中隔离一个特定的关键字。 我想搜索整个文件并返回具有相同关键字的行组。在

我对此有点困惑,我想知道在Python中是否有一种直接的regex方法来实现这一点?在

例如->

我的档案可能是这样的

1  0001    1   UG  science,ee;YEAR=onefour;standard->2;district->9
2  0002    1   UG  science,cs;YEAR=onefive;standard->1;district->9
3  0012    2   UG  science,eng;YEAR=onefour;standard->3;district->4
4  0021    2   UG  science,ee;YEAR=onetwo;standard->2;district->9
5  0056    4   UG  science,cs;YEAR=onefive;standard->1;district->8
6  0145    3   UG  science,eng;YEAR=onetwo;standard->4;district->2

我用正则表达式提取

^{pr2}$

并希望根据

"****"

输出应该是这样的-

1  0001    1   UG  science,ee;YEAR=onefour;standard->2;district->9
3  0012    2   UG  science,eng;YEAR=onefour;standard->3;district->4

2  0002    1   UG  science,cs;YEAR=onefive;standard->1;district->9
5  0056    4   UG  science,cs;YEAR=onefive;standard->1;district->8

4  0021    2   UG  science,ee;YEAR=onetwo;standard->2;district->9
6  0145    3   UG  science,eng;YEAR=onetwo;standard->4;district->2

我相信我可以用很长的方式打开文件,在字典中存储和匹配等等,但是我想知道是否有简短简洁的方法来做这件事。在

按要求-我试着编写并运行的一段代码-

#!/usr/bin/python

import re

##open file and read each line of file

dfile = open("datafile.txt","r")

##regex to find YEAR in entry and return YEAR

regex_unique = re.compile(r'(?<=\bYEAR=)[^;]+')

list_Name =[]

for line in dfile:
    match1 = re.search(regex_unique,line)
    if match1:
        if match1.group(0) not in list_Name:
        list_Name.append(match1.group(0))


## print (list_Name)

for item in list_Name:
for line in dfile:
    match2 = re.search(item,line)
    if match2:
        print (match2)

最后一点似乎不起作用-我假设如果我给

item

re.search

它应该在整个文件中搜索这个词-现在我想我可能需要在实际单词之前和之后添加一些通配符条目才能使它正常工作。在


Tags: nameinrelinecsyeareestandard
1条回答
网友
1楼 · 发布于 2024-10-02 10:28:16

我想我说的对,regex只处理行上的匹配,而不处理如何聚合匹配,所以您需要自己来处理。您可以通过编写自己的实用程序函数并将其与应用程序代码分开来保持简单。在

一般来说,分组操作必须遍历所有项才能组合组。如果不传递所有数据以收集组,然后再传递一次以输出组,则无法解决问题。在

列表字典是一种自然的数据结构,它通过一个键(如您所述)收集每一行。你自己做这件事有点糊涂,因为你经常需要测试一个键是否存在来知道你是应该添加到一个已有的列表中还是创建一个新的。幸运的是,python提供了defaultdict,它允许您:

from collections import defaultdict
>>> d = defaultdict(list)
>>> d[key].append(line)

因此,您可以执行以下操作:

^{2}$

相关问题 更多 >

    热门问题