Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2015 10:42:53

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

MemoryError

При запуске скрипта

# -*- coding: utf-8 -*-
''' Поиск e-mail в файлах'''
import re, os
dir = r'C:\email'
email = "info@example.com"
directory = os.listdir(dir)
for files in directory:
    fullname = os.path.join(dir, files)  
    if os.path.isfile(fullname):
        with open(fullname, encoding='utf-8', errors='ignore') as file_in_db:
            read_file = file_in_db.read()
            search = re.findall(email, read_file)
            strings = '\n'.join(search)
            if len(search) > 0:
                print (fullname)
                print("E-mail %s найден" % email)
                print (strings)
    else:
        print ("E-mail не найден")

Выдается ошибка:
Traceback (most recent call last):
  File "C:\search_email.py", line 14, in <module>
    read_file = file_in_db.read()
MemoryError

Посоветуйте, пожалуйста, как решить проблему

Офлайн

#2 Апрель 16, 2015 10:50:35

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

MemoryError

не читать весь файл в память - а кусками. Например прочитали 1мб в память, уже там обрабатывать как вам надо.
Ошибка возникает в случае если файл большой, а возможностей памяти или интерпретатора не хватает.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 16, 2015 11:04:46

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

MemoryError

Я это понял
Но не знаю как это сделать - не хватает знаний

Офлайн

#4 Апрель 16, 2015 11:37:19

slepov
Зарегистрирован: 2015-04-04
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

MemoryError

Moi5es
Но не знаю как это сделать - не хватает знаний

Вместо

with open(fullname, encoding='utf-8', errors='ignore') as file_in_db:
            read_file = file_in_db.read()

нужно читать по строкам.
with open(fullname, encoding='utf-8', errors='ignore') as file_in_db:
            for sting in file_in_db:
                search = re.findall(email, string)
                strings = '\n'.join(search)
                if len(search) > 0:
                    print (fullname)
                    print("E-mail %s найден" % email)
                    print (strings)

Офлайн

#5 Апрель 16, 2015 11:54:27

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

MemoryError

Спасибо, работает.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version