Разделение больших файлов с помощью python

У меня проблемы с разделением больших файлов (скажем, около 10 ГБ). Основная идея - просто прочитать строки и сгруппировать каждые, скажем, 40000 строк в один файл. Но есть два способа "чтения" файлов.

1) Первый - прочитать весь файл сразу и превратить его в СПИСОК. Но для этого потребуется загрузить ВСЕ файл в память, что болезненно для слишком большого файла.(Думаю, я задавал такие вопросы раньше) В python подходы к чтению ЦЕЛОГО файла сразу, которые я пробовал, включают:

input1=f.readlines()

input1 = commands.getoutput('zcat ' + file).splitlines(True)

input1 = subprocess.Popen(["cat",file],
                              stdout=subprocess.PIPE,bufsize=1)

Ну, тогда я могу просто сгруппировать 40000 строк в один файл с помощью: list [40000,80000] или list [80000,120000] Или преимущество использования списка в том, что мы можем легко указать на определенные строки.

2) Второй способ - читать строка за строкой; обрабатывать строку при ее чтении. Эти прочитанные строки не будут сохранены в памяти. Примеры включают:

f=gzip.open(file)
for line in f: blablabla...

или

for line in fileinput.FileInput(fileName):

Я уверен, что для gzip.open это f НЕ список, а объект файла. И, кажется, мы можем обрабатывать только построчно; тогда как я могу выполнить это «разделенное» задание? Как я могу указать на определенные строки файлового объекта?

Спасибо

9
задан LookIntoEast 11 November 2011 в 15:58
поделиться