【发布时间】:2010-11-03 08:17:32
【问题描述】:
我有多个(40 到 50 个)MP3 文件,我想将它们连接成一个文件。在 Python 中执行此操作的最佳方法是什么?
【问题讨论】:
我有多个(40 到 50 个)MP3 文件,我想将它们连接成一个文件。在 Python 中执行此操作的最佳方法是什么?
【问题讨论】:
将这些文件中的字节放在一起很容易......但是我不确定这是否会导致连续播放 - 我认为如果文件使用相同的比特率可能会,但我不确定。
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()
这将创建一个“everything.mp3”文件,将 C:\music 中所有 mp3 文件的所有字节连接在一起。
如果要在命令行中传递文件名,可以使用sys.argv[1:]代替iglob(...)等。
【讨论】:
嗯。我不会使用“线条”。快速而肮脏的使用
outfile.write( file1.read() )
outfile.write( file2.read() )
;)
【讨论】:
只是总结一下(并从nosklo's answer窃取),以便连接您所做的两个文件:
destination = open(outfile,'wb')
shutil.copyfileobj(open(file1,'rb'), destination)
shutil.copyfileobj(open(file2,'rb'), destination)
destination.close()
这与:
cat file1 file2 > destination
【讨论】:
改进了 Clint 和 nosklo,知道了上下文管理器,我觉得这样写更简洁:
import shutil
import pathlib
source_files = pathlib.Path("My_Music").rglob("./*.mp3")
with open("concatenated_music.mp3", mode="wb") as destination:
for file in source_files:
with open(file, mode="rb") as source:
shutil.copyfileobj(source, destination)
【讨论】: