Автор оригинала: Pankaj Kumar.
Объект Python File предоставляет различные способы чтения текстового файла. Популярным способом является использование метода readleines (), который возвращает список всех строк в файле. Тем не менее, это не подходит для чтения большого текстового файла, потому что весь файл содержится будет загружен в память.
Чтение больших текстовых файлов в Python
Мы можем использовать объект файла как итератор. Итератор вернет каждую строку одну на одну, которая может быть обработана. Это не будет читать весь файл в память, и он подходит для чтения больших файлов в Python.
Вот фрагмент кода, чтобы прочитать большой файл в Python, обрабатывая его как итератор.
import resource import os file_name = "/Users/pankaj/abcdef.txt" print(f'File Size is {os.stat(file_name).st_size / (1024 * 1024)} MB') txt_file = open(file_name) count = 0 for line in txt_file: # we can process file line by line here, for simplicity I am taking count of lines count += 1 txt_file.close() print(f'Number of Lines in the file is {count}') print('Peak Memory Usage =', resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) print('User Mode Time =', resource.getrusage(resource.RUSAGE_SELF).ru_utime) print('System Mode Time =', resource.getrusage(resource.RUSAGE_SELF).ru_stime)
Когда мы запускаем эту программу, производится вывод:
File Size is 257.4920654296875 MB Number of Lines in the file is 60000000 Peak Memory Usage = 5840896 User Mode Time = 11.46692 System Mode Time = 0.09655899999999999
- Я использую ОС модуль Чтобы распечатать размер файла.
- Ресурсный модуль используется для проверки времени использования памяти и процессора программы.
Мы также можем использовать С заявлением Чтобы открыть файл. В этом случае нам не нужно явно закрыть файл объект.
with open(file_name) as txt_file: for line in txt_file: # process the line pass
Что если большой файл не имеет строк?
Приведенный выше код будет работать отлично, когда содержимое большого файла разделено на многие строки. Но, если в одной строке есть большое количество данных, то она будет использовать много памяти. В этом случае мы можем прочитать содержимое файла в буфер и обработать его.
with open(file_name) as f: while True: data = f.read(1024) if not data: break print(data)
Приведенный выше код будет читать файловые данные в буфер 1024 байта. Тогда мы печатаем его к консоли.
Когда весь файл читается, данные станут пустыми, а оператор разрыва завершится цикл While.
Этот метод также полезен для чтения двоичного файла, такого как изображения, PDF, документы Word и т. Д.
Вот простой фрагмент кода, чтобы сделать копию файла.
with open(destination_file_name, 'w') as out_file: with open(source_file_name) as in_file: for line in in_file: out_file.write(line)
Ссылка : Вопрос в стойке