问题描述
我有一个.txt文件,其中包含很多研究所需的文本信息。因此,我正在尝试编写一个进行关键字搜索的程序(在我的情况下,我需要短语“ sold salt”),然后将以该短语开头的文本逐行写入新文件并剪切在某个时候关闭(我还没有决定)。这实际上是一本书,其中包含17世纪的数字化文档,用旧俄文写成,但是示意性的文本看起来像是:
“sheet_№1
文字文字文字文字
文字文字
文本文本文本文本文本文本出售盐文本文本文本文本出售盐文本文本文本文本文本文本
文字文字文字文字
sheet_№1_reverse
文本文本卖盐文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本“
所以这是一个非常糟糕的结构化事情,我想要的是将所有盐销售记录及其在全文中的位置放在一个文件中,以供我研究。
现在,对不起,很长的介绍,我只是想展示我需要处理的内容。
我尝试使用docx lib编写代码,但事实证明,唯一可行的方法是在docx文件中下划线所需的信息,然后通过使用代码将其删除,这并不是很糟糕,但仍然需要时间。
所以我停止了txt格式,现在我明白了:
key_1 = 'sold'
key_2 = 'salt'
f_old = open("text.txt",encoding='utf-8')
f_result = open("text_result.txt",'w',encoding='utf-8')
for line in f_old:
line = line.split()
if len(line) == 1:
for elem in range(len(line)):
f_result.write(line[elem] + '\n')
else:
if key_1 in line and key_2 in line:
for word in range(len(line)):
if line[word] == key_1 and line[word + 1] == key_2:
for elem in line[word: word + 10]:
f_result.write(elem + ' ')
f_result.write('\n')
f_old.close()
f_result.close()
基于上面的示例,它给了我这个结果:
“sheet_№1
卖盐文本文本文本文本文本 卖盐 文本
卖盐 文本文本文本文本文本文本
sheet_№1_reverse
卖盐文本文本文本文本文本文本文本文本文本
用我的双手剪掉“卖盐”和其他多余的信息(例如在第二行的末尾)并不是什么大问题,因为无论如何,我将使用包含比我需要的更多信息的行来执行此操作。但是,如果有什么想法可以让我的关键字在该行中出现两次或更多次,该如何减少行数?
我有一个想法,不仅要打开text_result进行写作,而且还要阅读,然后再通过以下方式剪掉这些行:
for line in f_result:
line = line.split()
if len(line) > 1:
for word in line[::-1]:
while line[word] != key_1:
line.pop([word])
但是如果我将其放在这样的代码中,它将不起作用:
key_1 = 'sold'
key_2 = 'salt'
f_old = open("text.txt",'w+',encoding='utf-8')
for line in f_old:
line = line.split()
if len(line) == 1:
for elem in range(len(line)):
f_result.write(line[elem] + '\n')
else:
if key_1 in line and key_2 in line:
for word in range(len(line)):
if line[word] == key_1 and line[word + 1] == key_2:
for elem in line[word: word + 7]:
f_result.write(elem + ' ')
f_result.write('\n')
for line in f_result:
line = line.split()
if len(line) > 1:
for word in line[::-1]:
while line[word] != key_1:
line.pop([word])
f_old.close()
f_result.close()
我只是想念一些基本的东西吗?
提前谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)