您好我试图从文本文档中的关键字中获取数据作为项目,我可以使用此代码执行此操作。我是python的新手,我不知道从哪里开始解决这个问题。
data_file = open("test.txt", "r")
Keyword = raw_input("Please enter the keyword: ")
go = False
start = Keyword
end = "[+][+]"
with open("test.txt") as infile:
for line in infile:
line = line.strip()
if start in line: go = True
elif end in line:
go = False
continue
if go:
print(line)
此代码适用于像
这样的示例文本文档Something Something Something Something
Something Something Something Something
Something Keyword:
Data
Data
Data
Data
End
Something
但是在尝试从具有奇怪字符的文件中读取时遇到了问题。例如:
2015/08/14 15:48:30 OUT:
2015/08/14 15:48:30 OUT:
PQ=
(3< ’’aÈ©ÿY˜ü â [+][+]52
2015/08/14 15:48:31:IN[+]53[+][+]101[+]-1[+] **Keyword** ,SHOWALL
**data**
**data**
**data**
**data**
**data**
**data**
**data**
end
由于目标是从该文本文档中读取并打印出关键字和结束之间的单词。如果它们中包含这些字符,它将不会执行。对于项目我无法删除这些字符,它只需要能够阅读文档并找到关键字并打印出中间的内容。
关于如何从具有这些奇怪字符的文本文档中读取任何想法,并且正确处理它而不仅仅是崩溃。
答案 0 :(得分:2)
首先,您需要以二进制模式打开文件。然后,您可以使用正则表达式提取输入的关键字和“结束”之间的所有文本。然后可以使用另一个正则表达式提取整个单词:
import re
with open("input.txt", "rb") as f_input:
start_token = raw_input("Please enter the start keyword: ")
end_token = raw_input("Please enter the end keyword: ")
reText = re.search("%s(.*?)%s" % (re.escape(start_token), re.escape(end_token)), f_input.read(), re.S)
if reText:
for word in re.findall(r"\b\w+\b", reText.group(1)):
print word
else:
print "not found"
对于您的示例文本,将显示:
SHOWALL
data
data
data
data
data
data
data
或者,如果您只想要两个点之间的所有文字,print reText.group(1)
而不是for
循环。
已更新:添加了对变量结束令牌的支持。
答案 1 :(得分:1)
该文件包含二进制内容,因此应以二进制模式打开
您可以通过
执行此操作data_file = open("test.txt", "rb")