Как исправить ошибку Memory Error при определении кодировки?

Как исправить появление ошибки MemoryError после внесения изменений в скрипт, который ищет значения, указанные пользователем, в CSV-файле из-за проблем с различными кодировками?
  • 7 апреля 2024 г. 12:09
Ответы на вопрос 2
1. Попробуйте увеличить объем доступной памяти для выполнения программы. Это можно сделать, например, увеличив размер виртуальной памяти операционной системы.

2. Проверьте, не происходит ли утечка памяти в вашем скрипте. Убедитесь, что все переменные правильно освобождаются после использования и что программа не создает большие временные структуры данных, которые могут привести к исчерпанию памяти.

3. Попробуйте использовать более эффективные методы работы с CSV файлами, например, использование библиотеки pandas вместо стандартного модуля csv в Python.

4. Убедитесь, что все файлы и данные, с которыми вы работаете, используют одну и ту же кодировку. В случае несовпадения кодировок могут возникать проблемы с памятью и обработкой данных.

5. Попробуйте разделить обработку данных на части и проводить ее поэтапно, чтобы избежать перегрузки памяти.

6. Проанализируйте данные в CSV-файле и убедитесь, что они не содержат ненужных или избыточных данных, которые могут увеличивать объем памяти, необходимый для их обработки. 

7. При необходимости, обратитесь к специалистам по работе с данными или программированию для получения более подробной консультации и помощи в решении проблемы.
используй для чтения csv pandas, на случай если они там огромные, то с параметром chunksize=количество строк (по простому чтение по частям) и encoding=то что chardet вернул. Далее поставь колонку с номерами телефона в индекс (для пандас не уникальные индексы это совершенно нормально) и верни csv файл с совпадениями. Код будет что то вроде этого. Предположим это твой csv файл <br/> <pre><code class="markdown">Номер Телефона,Имя,Фамилия
333,Иван,Петров
333,Василий,Сидоров
444,Петр,Прямой
333,Федор,Кривой</code></pre> <br/> <pre><code class="python">phone_numbers = pd.read_csv('test.csv',index_col='Номер Телефона')
numbers_of_interset = [777,333]
index = phone_numbers.index.intersection(numbers_of_interset)
not_found = pd.Index(numbers_of_interset).difference(test.index)
(
    phone_numbers.loc[index,:]
   .to_csv('result.csv')
)</code></pre> <br/> Читаем в фрейм и устанавливаем номер телефона в индекс, numbers_of_interest это те номера которые ты хочешь вернуть в качестве выборки если они есть в файле, делаем intersection с индексом фрейма, также находим те что не нашлись. Записываем файл только с теми что есть. При необходимости выводим те что не нашлись хранятся в not_found. <br/> <br/> Если они очень большие и требуют чтения по частям обратись к докам pandas ну или вот пример использования <a href="https://www.geeksforgeeks.org/how-to-load-a-massive-file-as-small-chunks-in-pandas/" rel="nofollow">https://www.geeksforgeeks.org/how-to-load-a-massiv...</a> <br/> <br/> Ну и если тебе не нужна вся выборка а только количество совпадений мне это не очевидно из твоего вопроса, то в контексте моего примера <br/> <code class="python">print(phone_numbers.loc[index,:].shape[0])</code> Даст тебе количество.
Похожие вопросы