我想提取一个文件(TXT格式)的某一部分,但这些部件将会重复数次。我想提取所有的这些,并写入到一个新的文件。
例如:这是一个文本文件,它有一些不同的模式。
AAAAAA
\ BEGIN {定理} AAAAAAAAAA \ {端定理}
YYYY
\ {开始}定理
AAAAAAAAAA
\ {端定理}
\ {开始}定理AAAAAAAAAA
\ {端定理}
我想提取和\ {结束}定理包括\ {开始}定理和\ {结束}定理每\ {开始}定理之间的所有行,然后他们在一个新的文本文件编写。下面是一个代码我试过,但将输出没有在我的写作文件。
inFile = open("infile.txt")
outFile = open("outfile.txt", "w")
keepCurrentSet = False
for line in inFile:
if line.startswith("\end{theorem}"):
keepCurrentSet = False
index +=1
if keepCurrentSet:
outFile.write(line)
if line.startswith("\begin{theorem} "):
keepCurrentSet = True
index1 +=1
inFile.close()
outFile.close()
您可以通过正则表达式实现这一目标。我不把代码读取和写入一个文本文件,假设你知道这个部分!
##text = Your text file in this variable
import re
p =r'(\bHeadingA\b.*?\bHeadingB\b)' ## Write the name of actual "A" and "B" from which you need to extract text in place of HeadingA and HeadingB
m =re.findall(p, text, re.I|re.M|re.DOTALL)
print(m) ## Write m in any new text file
您应该使用正则表达式(documentation here)。
在部分划分问题。
正如在编程的每一个问题,你应该把它分成更小的问题。在你的情况我会做下列方式:
1.找到你需要的单词的出现。
2.获取每个外观之间的范围内。
3.将文本复制到一个新的文件。
让我们来解决这个问题的部分:为了找到事件,您可以使用正则表达式中的find()
方法(简称正则表达式)。这会告诉你每次出现在您的字时的指数。你应该为A和B分别做到这一点,所以你知道哪里是每个。
注意:这样做的一个更先进的方法是建立像下面这样的正则表达式:(A)(*)(B))
,因为这将匹配A的外观和B的一个之间的一切,这也是比较容易。
至于第二和第三步,他们是非常简单的,一旦你理解了第一个。
祝好运!