Как разделить огромный файл на несколько файлов? - PullRequest
0 голосов
/ 08 июня 2011

Какой самый простой способ сделать это без нехватки памяти?

У меня есть файл объемом 9 ГБ, содержащий 100 миллионов строк (каждая - URL).

Как я могу разбить это на X-файлы? Я пытался for f in fileinput.input('...'), но почему-то его "убили".

Ответы [ 2 ]

0 голосов
/ 10 июня 2011
from __future__ import with_statement

YOUR_FILENAME= 'bigfile.log'
SPLIT_NAME= 'bigfile.part%05d.log'
SPLIT_SIZE= 10000 # lines
SPLITTER= lambda t: t[0]//SPLIT_SIZE

import itertools as it

with open(YOUR_FILENAME, "r") as input_file:
    for part_no, lines in it.groupby(enumerate(input_file), SPLITTER):
        with open(SPLIT_NAME % part_no, "w") as out:
             out.writelines(item[1] for item in lines)

Сохраните правильное имя файла как YOUR_FILENAME. Определите, сколько строк будет в каждой части (SPLIT_SIZE). Определите имя выхода (SPLIT_NAME). Запустить его. Вы не ограничены простыми именами файлов в YOUR_FILENAME и SPLIT_NAME, очевидно; Вы можете использовать пути.

0 голосов
/ 08 июня 2011

При работе с гигабайтными файлами, массивами с миллионами записей;старайтесь не использовать скриптовые языки.Если вы можете запустить код на C ++, это будет легко и без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...