Python 跨多个文本文件查找正则表达式或正则表达式列表,并提取匹配行 问题

Python 跨多个文本文件查找正则表达式或正则表达式列表,并提取匹配行 问题,python,regex,python-3.7,text-mining,Python,Regex,Python 3.7,Text Mining,注意:我擅长正则表达式,但我是Python新手。我试图尽可能广泛地阅读,但找不到与我的情景相匹配的解决方案,所以我提出了这个问题 我希望做到以下几点: 循环浏览某个文件夹中我可能使用的所有文本文件。docx/xml文件,但我会找出细节。我怀疑这是一个迭代的问题,但我不明白如何在这里做到这一点; 搜索包含在文件中的正则表达式或正则表达式列表,如使用地名索引,最好存储在外部.txt或.csv文件中; 打印或更好地将文件名、找到的匹配项以及包含后者的文本行写入CSV或Pandas。理想情况下,这些数据

注意:我擅长正则表达式,但我是Python新手。我试图尽可能广泛地阅读,但找不到与我的情景相匹配的解决方案,所以我提出了这个问题

我希望做到以下几点:

循环浏览某个文件夹中我可能使用的所有文本文件。docx/xml文件,但我会找出细节。我怀疑这是一个迭代的问题,但我不明白如何在这里做到这一点; 搜索包含在文件中的正则表达式或正则表达式列表,如使用地名索引,最好存储在外部.txt或.csv文件中; 打印或更好地将文件名、找到的匹配项以及包含后者的文本行写入CSV或Pandas。理想情况下,这些数据将放在电子表格的不同列中,因此它们可以是逗号分隔的值,但字典也可以工作。 我在这类代码方面取得了一些成功,这使我能够成功地打印匹配行。总共有六个小时的Python体验,我感到非常高兴

import re

def main():
        regex = re.compile("regex")
        with open("text_file.txt") as f:
            for line in f:
                result = regex.findall(line)
                if result == None:
                    continue
                elif result == []:
                    continue
                else:
                    print(f, result, line)

main()
问题和目标: 它返回正则表达式的所有捕获组。匹配行前面有多个捕获组。这不是一个问题,但我希望将来能够以某种方式操纵它; 我希望能够重用对象文件名、匹配、行以进行进一步的操作和分析,理想情况下将其全部导入pandas对象,但我不知道如何做。任何建议都将不胜感激; 当正则表达式匹配同一行中的多个模式时,它只返回一行包含匹配项的内容。然而,我希望有一个这样的例子能得到不同的处理。具体地说,我希望它返回尽可能多的匹配行。考虑示例字符串: 我的正则表达式Bobby?我将和鲍勃和鲍比比赛。但是如果我没有弄错的话,我的代码会打印出这样的东西

<_io.TextIOWrapper name='text_file.txt' mode='r' encoding='UTF-8'> [('Bob', ''), ('Bobby', ('by')) We used to call Bob "Little Bobby"
相反,我希望它打印两行,一行用于Bob匹配,另一行用于Bobby匹配。如果我没记错的话,这可以在grep中相对容易地完成,但是我在re模块文档中找不到任何有用的东西

循环浏览某个文件夹中我可能使用的所有文本文件。docx/xml文件,但我会找出细节。我怀疑这是一个迭代的问题,但我不明白如何在这里做到这一点; 是的,您需要迭代。我建议使用或根据您的需要

例如:

导入glob 对于glob.glob'/path/to/my/dir'、“*.txt”中的文件名: 打印文件名 用文件名做其他事情 搜索包含在文件中的正则表达式或正则表达式列表,如使用地名索引,最好存储在外部.txt或.csv文件中; 我建议使用或

例如:

进口稀土 my_re=re.compile'which your regex' 使用openfilename作为f: 文件内容=f.read 对于my_re.findallfile内容中的匹配: 打印匹配 这场比赛你想怎么做就怎么做 要从匹配中提取组,需要使用函数

打印或更好地将文件名、找到的匹配项以及包含后者的文本行写入CSV或Pandas。理想情况下,这些数据将放在电子表格的不同列中,因此它们可以是逗号分隔的值,但字典也可以工作。 您可以将所有数据加载到Python DICT列表中,然后使用该库将其输出到CSV

例如:

导入csv 数据列表=[{…},{…}] 使用openoutput_文件名,“w+”作为f: 这将指定CSV的标题。 也可以在此处指定字符串列表 fieldnames=数据[0]的列表。键 writer=csv.dictwriter,fieldnames=fieldnames 编剧 对于\u数据列表\u中的项目: writer.writerowitem
你可能想看看和/或非常感谢你。这看起来很棒。我想我明白我现在必须遵循的大方向了!
<_io.TextIOWrapper name='text_file.txt' mode='r' encoding='UTF-8'> [('Bob', ''), ('Bobby', ('by')) We used to call Bob "Little Bobby"