Como posso concatenar arquivos em Python?
Pergunta
Eu tenho múltiplos (entre 40 e 50) arquivos MP3 que eu gostaria de concatenar em um arquivo. Qual é a melhor maneira de fazer isso em Python?
Use fileinput
módulo para percorrer cada linha de cada arquivo e escrevê-lo a um arquivo de saída? Terceirizar para janelas comando copy
?
Solução
Colocar os bytes nos arquivos juntos é fácil ... mas eu não tenho certeza se isso vai causar uma reprodução contínua - Acho que pode se os arquivos estão usando a mesma taxa de bits, mas não tenho certeza
from glob import iglob
import shutil
import os
PATH = r'C:\music'
destination = open('everything.mp3', 'wb')
for filename in iglob(os.path.join(PATH, '*.mp3')):
shutil.copyfileobj(open(filename, 'rb'), destination)
destination.close()
Isso vai criar um único arquivo "everything.mp3" com todos os bytes de todos os arquivos de mp3 em C:. \ Música concatenados
Se você quer passar os nomes dos arquivos em linha de comando, você pode usar sys.argv[1:]
vez de iglob(...)
, etc.
Outras dicas
Apenas para resumir (e roubar de resposta de nosklo ), a fim de concatenar dois arquivos que você faz:
destination = open(outfile,'wb')
shutil.copyfileobj(open(file1,'rb'), destination)
shutil.copyfileobj(open(file2,'rb'), destination)
destination.close()
Este é o mesmo que:
cat file1 file2 > destination
Hmm. Eu não vou usar "linhas". Rápido e uso suja
outfile.write( file1.read() )
outfile.write( file2.read() )
;)