Python перебирает текстовые файлы и сохраняет содержимое в список списков, мертвое ядро

#python #list #loops #kernel #txt

Вопрос:

Я столкнулся с проблемой мертвого ядра. Я пытаюсь сохранить более 2000 файлов .txt в список списков. my_path содержит пути к этим более чем 2000 файлам. Я попытался try except как показано ниже, но это не помогло. Ядро, похоже, умирает случайным образом, т. Е. Я пытался найти файлы, в которых оно ломается, но, похоже, оно ломается на файлах, которые не были проблемой во время предыдущего запуска.

 my_list = []
for i in my_path:
    with open(i) as f:
        try:
            lines = f.read().splitlines()
            #print(f)
            my_list.append(lines)
            f.close() 
        except:
            print(f)
 

Я также попытался открыть файлы, в которых ядро умерло отдельно, и, похоже, они работают нормально.
Я предполагаю, что что-то не так с моим циклом?

UPD. Я использую EndeavourOS, Jupyter в VSCode, оперативная память 16 ГБ. Я разделил пути, и, похоже, у меня заканчивается память. Я попытался del ... gc.collect() , но безуспешно, он не освобождает память, и как только она превышает 12 ГБ, происходит сбой.

Комментарии:

1. Было бы хорошо, если бы вы могли добавить к вопросу дополнительную информацию, например, об использовании памяти, запущенной системе и т.д.

2. @Timus спасибо, обновлено.

3. Ладно, тогда, я думаю, это my_list просто становится слишком большим. С чем ты пытаешься это сделать my_list ? Может быть, более ленивый подход позволил бы избежать этой проблемы (например, при необходимости производить линии через генератор)?

4. @Timus большое спасибо, я думаю, что вы правы, последнее время становится большим, что перегружает систему. Я не совсем понимаю , что вы имеете в виду producing the lines through a generator when needed , но после некоторой проверки данных я просто ограничиваю их первыми 1000 строками, и, похоже, для моего образца это работает нормально.

5. Извините за загадочный язык. Я имел в виду следующее: используя генераторы, вы можете создавать объекты, которые могут довольно эффективно обрабатывать большие объемы данных ( «ленивые» ). Доступен ли этот вариант здесь или нет, зависит от того, чего вы хотите достичь, поэтому мой вопрос относительно ваших намерений my_list . Если вам интересно, посмотрите, например, здесь (или здесь ).