Как обработать большой текстовый файл?
Помогите! допустим, у меня есть текстовый файл на 3 106 666 666 строк, как пройтись по элементам?я пробовал сначала открыть с помощью
file = open("sus.txt", "r", encoding='utf-8') file = open("sus.txt", "r", encoding='utf-8') n = 0 a = [] r = 0 for line in file: n += 1 a.append(line) if n == 500: r += 1 q = open(str(r), 'w+', encoding='utf-8') q.writelines(a) a = [] q.close() n = 0 |
file = open("sus.txt", "r", encoding='utf-8') file = open("sus.txt", "r", encoding='utf-8') n = 0 a = [] r = 0 for line in file: n += 1 a.append(line) if n == 500: r += 1 q = open(str(r), 'w+', encoding='utf-8') q.writelines(a) a = [] q.close() n = 0
но сохранялось все в 5 файлов весом примерно 1,5 гб, хотя исходный был 222 гб
Дополнительно:
раз не осилил python, может эту задачу проще решить средствами OS? ну или освоить дебагинг
file = open("sus.txt", "r", encoding='utf-8') file = open("sus.txt", "r", encoding='utf-8')file = open("sus.txt", "r", encoding='utf-8') file = open("sus.txt", "r", encoding='utf-8')
Почему дублируется строка?
В какой ОС нужно разбить файл на куски поменьше? В Линуксе есть команда split.
сплит же действует на строки, а не списки
Ответы:
Зачем ты складываешь строки в список? Почему не писать их сразу в выходной файл?
with open("sus.txt", "r", encoding='utf-8') as source: idx = 1 # номер файла-приёмника go = True while go: with open(f'part{idx}.txt', 'w', encoding='utf-8') as dest: for _ in range(500): # не более 500 строк в каждый файл line = source.readline() if not line: # пустая строка = конец файла go = False break dest.write(line) idx += 1 |
with open("sus.txt", "r", encoding='utf-8') as source: idx = 1 # номер файла-приёмника go = True while go: with open(f'part{idx}.txt', 'w', encoding='utf-8') as dest: for _ in range(500): # не более 500 строк в каждый файл line = source.readline() if not line: # пустая строка = конец файла go = False break dest.write(line) idx += 1
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для обработки большого текстового файла в PHP можно воспользоваться функцией fopen для открытия файла в режиме чтения, fgets для чтения содержимого файла построчно, а также fclose для закрытия файла после завершения обработки.
Пример кода:
$file = fopen('file.txt', 'r'); // открываем файл для чтения if ($file) { while (($line = fgets($file)) !== false) { // обрабатываем каждую строку файла echo $line; // просто выводим строку, но здесь можно добавить любую логику обработки } fclose($file); // закрываем файл после обработки } else { echo 'Ошибка открытия файла'; }
Если файл слишком большой и его содержимое не помещается в оперативной памяти, можно использовать другой подход. Например, можно читать файл блоками с помощью функции fread:
$file = fopen('file.txt', 'r'); // открываем файл для чтения if ($file) { $bufferSize = 4096; // размер блока для чтения файла while (!feof($file)) { $buffer = fread($file, $bufferSize); // обрабатываем каждый блок данных echo $buffer; // просто выводим данные, здесь можно добавить свою логику обработки } fclose($file); // закрываем файл после обработки } else { echo 'Ошибка открытия файла'; }
Таким образом, вы можете эффективно обрабатывать большие текстовые файлы в PHP без перегрузки оперативной памяти.