Я пытаюсь, по-моему, реплицировать функциональность оболочки Linux в cat
как агностик, так что я могу взять два текстовых файла и объединить их содержимое в следующим образом:добавить содержимое из одного файла в другой с расстановкой новой строки
file_1 содержит:
42 bottles of beer on the wall
file_2 содержит:
Beer is clearly the answer
Merged файл должен содержать:
42 bottles of beer on the wall
Beer is clearly the answer
Большинство методов, которые я читал о том, однако, в конечном итоге производство: 42 бутылок пива на wallBeer явно ответ
Другая проблема заключается в том, что фактические файлы, с которыми я Мне нравится работать с невероятно большими текстовыми файлами (FASTA отформатированные файлы последовательности белка), так что я думаю, что большинство методов, читающих строки за строкой, неэффективны. Таким образом, я пытался выяснить, решение с использованием shutil
, как показано ниже:
def concatenate_fasta(file1, file2, newfile):
destination = open(newfile,'wb')
shutil.copyfileobj(open(file1,'rb'), destination)
destination.write('\n...\n')
shutil.copyfileobj(open(file2,'rb'), destination)
destination.close()
Однако это приводит к тем же проблемам, как раньше, за исключением «...» между ними. Ясно, что новые строки игнорируются, но я не понимаю, как правильно их управлять.
Любая помощь была бы очень признательна.
EDIT:
Я попытался предложение Мартейн, но значение line_sep
Возвращается None
, который выдает ошибку, когда функция пытается записать, что в выходной файл. Я получил эту работу прямо сейчас через os.linesep
методу, изложенному в менее оптимален следующим образом:
with open(newfile,'wb') as destination:
with open(file_1,'rb') as source:
shutil.copyfileobj(source, destination)
destination.write(os.linesep*2)
with open(file_2,'rb') as source:
shutil.copyfileobj(source, destination)
destination.close()
Это дает мне необходимые мне функции, но я все еще на немного потери, почему (по-видимому более элегантный) решение не работает.
Это не ответ, но 'file1',' Параметры file2' не соответствует 'file_1',' file_2' в теле функции. – falsetru
Какие методы вы пытались читать по строкам? – Totem
@falsetru Ух, да, это было плохо. Спасибо, что поймали его. Исправленный. – glarue