У меня возникли проблемы при попытке разбить большие файлы (скажем, около 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] or list[80000,120000]
Или преимущество использования списка в том, что мы можем легко указывать на определенные строки.
2) Второй способ - читать построчно; обрабатывать строку при чтении. Эти прочитанные строки не будут сохранены в памяти.
Примеры включают в себя:
f=gzip.open(file)
for line in f: blablabla...
или
for line in fileinput.FileInput(fileName):
Я уверен, что для gzip.open это f не список, а объект файла. И, кажется, мы можем обрабатывать только построчно; тогда как я могу выполнить эту «разделенную» работу? Как я могу указать на определенные строки файлового объекта?
Спасибо