尝试从具有奇怪字符的文件中读取某些文本。 (蟒蛇)

时间:2015-08-17 14:55:24

标签: python file encoding io character

您好我试图从文本文档中的关键字中获取数据作为项目,我可以使用此代码执行此操作。我是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

由于目标是从该文本文档中读取并打印出关键字和结束之间的单词。如果它们中包含这些字符,它将不会执行。对于项目我无法删除这些字符,它只需要能够阅读文档并找到关键字并打印出中间的内容。

关于如何从具有这些奇怪字符的文本文档中读取任何想法,并且正确处理它而不仅仅是崩溃。

2 个答案:

答案 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")