Python, ошибка памяти при разборе файла размером 30 МБ (уже загружен на мой локальный компьютер) - PullRequest
1 голос
/ 25 сентября 2019

Вот мой адрес загрузки, имя файла 'kosarak'

http://fimi.uantwerpen.be/data/

Мой код синтаксического анализа:

parsedDat = [line.split() for line in open('kosarak.dat').readlines()]

Мне нужны эти данные в целом, чтобы запустить какой-либо методпоэтому читайте одну строку за одной строкой, и выполнение операции с каждой строкой здесь мне не подходит.

Файл имеет размер всего 30 МБ, и на моем компьютере осталось не менее 10 ГБ памяти и 30 + G Жесткийместо на диске, так что я думаю, что не должно быть никаких проблем с ресурсами

К вашему сведению: моя версия python 2.7, и я запускаю свой питон внутри Spyder.Моя ОС - Windows 10.

PS: Вам не нужно использовать мой код / ​​метод синтаксического анализа для выполнения этой работы, если вы можете получить данные из файла в мою среду Python, которая была бы идеальной.

1 Ответ

4 голосов
/ 25 сентября 2019

Возможно, это может помочь.

with open('kosarak.dat', 'r') as f:  # Or 'rb' for binary data.
    parsed_data = [line.split() for line in f]

Разница в том, что ваш подход считывает все строки в файле сразу, а затем обрабатывает каждую из них (эффективно требуя 2x памяти, один раз для данных файла иеще раз для проанализированных данных, все из которых должны быть сохранены в памяти одновременно), тогда как этот подход просто считывает файл построчно и требует только памяти для результирующего parsed_data.

InКроме того, ваш метод не закрывал файл явно (хотя вы могли просто не показать эту часть кода).Этот метод использует менеджер контекста (with expression [as variable]:), который автоматически закрывает объект после завершения блока with, даже после ошибки.См. PEP 343 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...