Читать большой текстовый файл в Python - PullRequest
0 голосов
/ 31 октября 2018

Я хочу получить каждую строку из текстового файла в Python (около 1 миллиарда строк), и из каждой строки я беру несколько слов и вставляю в другой файл Я использовал

with open('') as f:
   for line in f:
       process_line(line)

Этот процесс занимает много времени. Как я могу обработать это, чтобы прочитать все содержимое примерно за 2 часа?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

читайте о генераторах в Python. Ваш код должен выглядеть так:

def read_file(yours_file):
    while True:
        data = yours_file.readline()
        if not data:
            break
        yield data
0 голосов
/ 31 октября 2018

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

Таким образом, вместо того, чтобы записывать в 3 файла одновременно с чтением строк, вы можете буферизовать миллион строк (что должно занимать менее 1 ГБ памяти), прежде чем записать 3 миллиона слов в выходные файлы. один файл за раз, так что это приведет к гораздо меньшей фрагментации файла:

def write_words(words, *files):
    for i, file in enumerate(files):
        for word in words:
            file.write(word[i] + '\n')

words = []
with open('input.txt', 'r') as f, open('words1.txt', 'w') as out1, open('words2.txt', 'w') as out2, open('words3.txt', 'w') as out3:
    for count, line in enumerate(f, 1):
        words.append(line.rstrip().split(','))
        if count % 1000000 == 0:
            write_words(words, out1, out2, out3)
            words = []
    write_words(words, out1, out2, out3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...