2017-02-17 8 views
-1

Я сделаю некоторый процесс в текстовом файле, который в настоящее время занимает много времени. Я наблюдал из монитора активности, что в настоящее время приложение использует только 1 поток, поэтому я решил разделить файл на multiprocessing.cpu_count() равные файлы и выполнить один и тот же процесс в них отдельно.Python Разбиение текстового файла

Мой код выглядит следующим образом:

with open(filename) as f: 
    "do the process" 

Я хочу изменить это в:

with open(filename) as f: 
    files = f.splitinto(cpu_count) 
    for file in files: 
     "start the threads to do the same process for each file" 
+2

В чем ваш вопрос? Вы выглядите так, как будто у вас есть это под контролем. –

+0

Существует не такой метод, как f.splitinto для разбиения файла на несколько файлов. Это то, что им нужно. – Mehr

+0

Ах. Хорошо. Что вы понимаете, разбивая файл на несколько файлов? Разделение как? –

ответ

1

file.readlines() дает строки текстового файла в виде списка. Это означает, что если у вас есть текстовый файл со 100 строками, readlines() даст вам list длиной 100 - где каждый элемент является строкой из вашего файла. Исходя из этого, вы можете сделать:

with open('test.txt', 'r') as myfile: 
    lines = myfile.readlines() 
    lines_list[0] = lines[0:len(lines)/cpu_count) 
    # ... and so on.. 

После чего вы можете разделить строки и обрабатывать их, как вы хотите.

+0

Рассмотрите файл с размером файла 5 ГБ. Не будет ли это слишком много памяти? – Mehr

+0

Будет. Затем вы должны написать отдельную функцию, чтобы разбить исходный файл на несколько файлов, а затем обработать эти файлы с помощью кода, который у вас уже есть. Мою точку зрения, если у вас есть текстовый файл, самый простой способ разделить его на линии. – Anomitra

Смежные вопросы