Python 在非常大的文件中搜索字符串并打印包含该字符串的行

Python 在非常大的文件中搜索字符串并打印包含该字符串的行,python,Python,尝试搜索字符串(电子邮件地址)并打印在1.66 gig.dump文件中找到的行(ashley madison)。如果我将print(line)更改为print('true'),则返回true,因此我知道它正在读取文件,但当我尝试打印该行时,python崩溃,没有错误。请帮忙。WindowsVista上的Python3.4(我使用它作为python的学习练习,而不是使用数据库和导入) 改为以流的形式打开文件,并从流中读取,而不是将整个文件加载到RAM中。使用 正如我所怀疑的,该文件的每一行都非常长

尝试搜索字符串(电子邮件地址)并打印在1.66 gig.dump文件中找到的行(ashley madison)。如果我将print(line)更改为print('true'),则返回true,因此我知道它正在读取文件,但当我尝试打印该行时,python崩溃,没有错误。请帮忙。WindowsVista上的Python3.4(我使用它作为python的学习练习,而不是使用数据库和导入)


改为以流的形式打开文件,并从流中读取,而不是将整个文件加载到RAM中。使用


正如我所怀疑的,该文件的每一行都非常长(正如您所发现的,大约有一百万个字符)。大多数控制台并没有设置为处理这类事情,所以将这一行写入文本文件是最好的选择。然后,您可以在文本编辑器或文字处理器中打开该文件,并使用其搜索功能定位感兴趣的区域

要使用周围文本的某些字符显示搜索字符串,可以使用正则表达式

import re
...
# replace this:
'''
    if 'email@address.com' in line:
        #print ('true')
        print (line)
'''
# with this:
    print(*re.findall(r'(.{0,10}email@address\.com.{0,10})', line), sep='\n')
它将在搜索字符串前后打印最多10个字符的匹配项,并用换行符分隔

例如:

>>> print(*re.findall(r'(.{0,10}str.{0,10})', 'hello this is a string with text and it is very strong stuff'), sep='\n')
this is a string with t
t is very strong stuff

我的初步猜测是某种编码问题(ASCII与UTF-8)。能否在
open()
调用中添加参数
encoding='utf-8'
?也许
打印(repr(line))
?或者可能由于某种原因,这些行很长,并且无法将它们打印到控制台?您是否尝试过将每个匹配行作为输出写入新文件?我尝试过您对utf-8和打印(repr(line))的建议,但它仍然崩溃。如何
type(line)
len(line)
?它确实需要大量的时间来处理,对吗?我能够通过写入一个文件得到一个结果…它创建了一个.97MB的文本文件,所以我猜行非常大?解决此问题的最佳方法?是的,控制台可能不喜欢一次显示近一百万个字符。打开文本文件并按Ctrl+F键输入搜索字符串?对于searchfile:中的行,使用
对文件进行迭代不会将整个文件加载到RAM中。这就是这种方法的全部要点。我添加了以下内容,并让它用搜索的字符串打印这个巨大的谎言:用open('damn.txt','w')作为文件:
import re
...
# replace this:
'''
    if 'email@address.com' in line:
        #print ('true')
        print (line)
'''
# with this:
    print(*re.findall(r'(.{0,10}email@address\.com.{0,10})', line), sep='\n')
>>> print(*re.findall(r'(.{0,10}str.{0,10})', 'hello this is a string with text and it is very strong stuff'), sep='\n')
this is a string with t
t is very strong stuff