Какой самый быстрый способ объединить несколько файлов в столбце wise (внутри Python)?Самый быстрый способ конкатенировать несколько файлов column wise - Python
Предположим, что у меня есть два файла с 1 000 000 000 строк и ~ 200 символов UTF8 в строке.
Метод 1: Обман с paste
Я мог бы объединить эти два файла под систему Linux с помощью paste
в оболочке, и я мог обмануть с помощью os.system
, то есть:
def concat_files_cheat(file_path, file1, file2, output_path, output):
file1 = os.path.join(file_path, file1)
file2 = os.path.join(file_path, file2)
output = os.path.join(output_path, output)
if not os.path.exists(output):
os.system('paste ' + file1 + ' ' + file2 + ' > ' + output)
Метод 2 : Использование диспетчера вложенных контекстов с zip
:
def concat_files_zip(file_path, file1, file2, output_path, output):
with open(output, 'wb') as fout:
with open(file1, 'rb') as fin1, open(file2, 'rb') as fin2:
for line1, line2 in zip(fin1, fin2):
fout.write(line1 + '\t' + line2)
Метод 3: Использование fileinput
ли fileinput
перебирать файлы параллельно? Или они будут последовательно перебирать каждый файл после другого?
Если это бывшая, я бы предположить, что это будет выглядеть следующим образом:
def concat_files_fileinput(file_path, file1, file2, output_path, output):
with fileinput.input(files=(file1, file2)) as f:
for line in f:
line1, line2 = process(line)
fout.write(line1 + '\t' + line2)
Метод 4: Рассматривайте их как csv
with open(output, 'wb') as fout:
with open(file1, 'rb') as fin1, open(file2, 'rb') as fin2:
writer = csv.writer(w)
reader1, reader2 = csv.reader(fin1), csv.reader(fin2)
for line1, line2 in zip(reader1, reader2):
writer.writerow(line1 + '\t' + line2)
Учитывая размер данных, которые были бы быстрейший?
Почему бы вам не выбрать один из них? Могу ли я потерять или добавить информацию?
Для каждого метода, как бы выбрать другой разделитель, отличный от ,
или \t
?
Существуют ли другие способы достижения той же колонны конкатенации? Они так же быстры?
... вы пытались профиль? Ответ на этот вопрос, вероятно, зависит от версии оборудования, ОС и python ... – Bakuriu
Кажется, что 'fileinput' читает файл последовательно и не читает файлы параллельно. – alvas
Метод 1 взял 2.098e-05, а Method2 взял 2.914 ... Нет ли сопоставимой эквивалентности «обману»? – alvas