如何在大型文本文件中的两个唯一单词之间提取信息

use*_*760 17 python search parsing text batch-file

我有大约150个文本文件填充了字符信息.每个文件包含两个唯一的单词()alpha和bravo,我想在这些独特的单词之间提取文本并将其写入不同的文件.

手动我可以CTRL + F为两个单词并在其间复制文本,我只是想知道如何使用程序(最好是Python)为许多文件执行此操作.

Ran*_*Rag 33

您可以使用正则表达式.

>>> st = "alpha here is my text bravo"
>>> import re
>>> re.findall(r'alpha(.*?)bravo',st)
[' here is my text ']
Run Code Online (Sandbox Code Playgroud)

我的test.txt文件

alpha here is my line
yipee
bravo
Run Code Online (Sandbox Code Playgroud)

现在使用open来读取文件而不是应用regular expressions.

>>> f = open('test.txt','r')
>>> data = f.read()
>>> x = re.findall(r'alpha(.*?)bravo',data,re.DOTALL)
>>> x
[' here is my line\nyipee\n']
>>> "".join(x).replace('\n',' ')
' here is my line yipee '
>>>
Run Code Online (Sandbox Code Playgroud)


Mis*_*sev 11

a = 'alpha'
b = 'bravo'
text = 'from alpha all the way to bravo and beyond.'

text.split(a)[-1].split(b)[0]
# ' all the way to '
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过添加计数1来帮助拆分,因此它将停止寻找要拆分的其他实例:`text.split(a,1)` (4认同)

Joh*_*hin 7

str.find和它的兄弟姐妹rfindstartendARGS.

alpha = 'qawsed'
bravo = 'azsxdc'
startpos = text.find(alpha) + len(alpha)
endpos = text.find(bravo, startpos)
do_something_with(text[startpos:endpos]
Run Code Online (Sandbox Code Playgroud)

如果包含的文本很短且靠近前面,这是最快的方法.

如果包含的文本相对较大,请使用:

startpos = text.find(alpha) + len(alpha)
endpos = text.rfind(bravo)
Run Code Online (Sandbox Code Playgroud)

如果包含的文本很短且接近结尾,请使用:

endpos = text.rfind(bravo)
startpos = text.rfind(alpha, 0, endpos - len(alpha)) + len(alpha)
Run Code Online (Sandbox Code Playgroud)

在任何情况下,第一种方法都比从文本开头开始第二次搜索的朴素方法更好; 如果您包含的文本没有显性模式,请使用它.