Python 跨多个文本文件查找正则表达式或正则表达式列表,并提取匹配行 问题
注意:我擅长正则表达式,但我是Python新手。我试图尽可能广泛地阅读,但找不到与我的情景相匹配的解决方案,所以我提出了这个问题 我希望做到以下几点: 循环浏览某个文件夹中我可能使用的所有文本文件。docx/xml文件,但我会找出细节。我怀疑这是一个迭代的问题,但我不明白如何在这里做到这一点; 搜索包含在文件中的正则表达式或正则表达式列表,如使用地名索引,最好存储在外部.txt或.csv文件中; 打印或更好地将文件名、找到的匹配项以及包含后者的文本行写入CSV或Pandas。理想情况下,这些数据将放在电子表格的不同列中,因此它们可以是逗号分隔的值,但字典也可以工作。 我在这类代码方面取得了一些成功,这使我能够成功地打印匹配行。总共有六个小时的Python体验,我感到非常高兴Python 跨多个文本文件查找正则表达式或正则表达式列表,并提取匹配行 问题,python,regex,python-3.7,text-mining,Python,Regex,Python 3.7,Text Mining,注意:我擅长正则表达式,但我是Python新手。我试图尽可能广泛地阅读,但找不到与我的情景相匹配的解决方案,所以我提出了这个问题 我希望做到以下几点: 循环浏览某个文件夹中我可能使用的所有文本文件。docx/xml文件,但我会找出细节。我怀疑这是一个迭代的问题,但我不明白如何在这里做到这一点; 搜索包含在文件中的正则表达式或正则表达式列表,如使用地名索引,最好存储在外部.txt或.csv文件中; 打印或更好地将文件名、找到的匹配项以及包含后者的文本行写入CSV或Pandas。理想情况下,这些数据
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"