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

时间:2015-08-25 23:10:22

标签: python

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

SELECT d.day, SUM(duration) as sum
FROM 
    days d
    left join myTable m
         on CONVERT(date, m.starttime) = d.day
GROUP BY d.day

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-2)

将文件作为流打开,然后从流中读取,而不是将整个文件加载到RAM。使用io from the Python standard library

with io.open('aminno_member_email.dump', 'r') as file:
    ...