У меня есть некоторые проблемы с попыткой разделить большие файлы (скажем, около 10 ГБ). Основная идея - просто читать строки и группировать каждый, скажем 40000 строк в один файл. Но есть два способа «чтения» файлов.Сплит больших файлов с использованием python
1) Первый из них заключается в том, чтобы сразу прочитать файл WHOLE и внести его в список. Но для этого потребуется загрузить файл WHOLE в память, что является болезненным для слишком большого файла. (Я думаю, что я задавал такие вопросы раньше) В питоне, подходы читать весь файл, как только я попытался включить:
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, это е НЕ список, а объектный файл. И кажется, что мы можем обрабатывать только строки за строкой; то как я могу выполнить эту «расколотую» работу? Как я могу указать на конкретные строки файлового объекта?
Благодаря
Когда вы думаете об этом, вы не можете. Вы можете знать только, на какой строке вы находитесь, только после того, как вы прочитали все предыдущие строки и подсчитали разрывы строк (\ n). (Игнорирование особого случая, что это какой-то странный файл, в котором каждая строка имеет известную длину.) – rplnt