Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图从具有奇怪字符的文件中读取某些文本。(Python)_Python_File_Encoding_Io_Character - Fatal编程技术网

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

试图从具有奇怪字符的文件中读取某些文本。(Python),python,file,encoding,io,character,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

您好,我正在尝试从文本文档中的关键字中获取数据,作为一个项目,我可以使用以下代码来实现这一点。我对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
2015/08/14 15:48:30外出:
2015/08/14 15:48:30外出:
PQ=
(3)aÈYÿü–[+]52
2015/08/14 15:48:31:IN[+]53[+][+]101[+]-1[+]**关键字**,SHOWALL
**资料**
**资料**
**资料**
**资料**
**资料**
**资料**
**资料**
结束
由于目标是从这个文本文档中读取并打印出关键字和结束之间的单词。如果其中包含这些字符,它将不会执行。对于项目,我不能删除这些字符,它只需要能够通读文档并找到关键字并打印出介于两者之间的内容


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

该文件包含二进制内容,因此应以二进制模式打开

你可以这样做

data_file = open("test.txt", "rb")

首先,您需要以二进制模式打开文件。然后,您可以使用正则表达式提取输入的关键字和“end”之间的所有文本。然后,可以使用另一个正则表达式提取整个单词:

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
或者,如果您只需要两点之间的所有文本,请使用
打印reText.group(1)
而不是
for
循环


更新:增加了对可变端令牌的支持。

hmm它仍然没有从读取中读取。例如,这是我想从中获取数据的文件预览,但由于其间的二进制代码,它没有完全读取文件。2015/08/14 15:48:30 OUT:ACK 1 2015/08/14 15:48:30 OUT:ACK 10376 PQ=(3)在[+]53[+][+]101[+]-1[+]**关键字**中,显示所有数据endI似乎越来越近了我有一个关于“%s”(.*end)”的问题如果我也想输入end关键字呢?例如,如果我想阅读,直到它到达香蕉,让用户输入end关键字呢?如果我想让它一行一行地打印数据,而不是一个字一个字地打印数据。目前,它将以这种方式打印数据格式d a t a而不是数据I已更新脚本,以允许输入两者。如前所述,在文本中,如果将
for
循环替换为
print reText.group(1)
您将获得原始格式的所有文本。非常好,谢谢!我会将此设置为最佳答案,再次感谢!如果您不介意我问一下,在Python中继续学习文件I/O的一些很棒的资源是什么?很高兴它起了作用。深入Python是一本很好的免费书籍,可以开始学习大部分内容。还可以查看Python CSV这是一个非常方便的库。学习正则表达式需要时间,但非常有用。