Рубрики
Без рубрики

Как читать большие текстовые файлы в Python

Как читать большие файлы в Python? Мы можем использовать объект файла Python в качестве итератора для чтения его линии по строке. Мы также можем использовать буфер для чтения больших двоичных файлов.

Автор оригинала: 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)

Ссылка : Вопрос в стойке