如何在Python中连接文件?

时间:2009-06-16 13:38:56

标签: python file mp3

我有多个(40到50个)MP3文件,我想连接成一个文件。在Python中执行此操作的最佳方法是什么?

使用fileinput模块遍历每个文件的每一行并将其写入输出文件?外包到windows copy命令?

4 个答案:

答案 0 :(得分:47)

将这些文件中的字节放在一起很容易......但我不确定这是否会导致连续播放 - 我认为如果文件使用相同的比特率,但我不确定。

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”文件,其中所有mp3文件的所有字节都在C:\ music中连接在一起。

如果要在命令行中传递文件的名称,可以使用sys.argv[1:]代替iglob(...)等。

答案 1 :(得分:33)

只是总结(并从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

答案 2 :(得分:5)

嗯。我不会用“线”。快速而肮脏的使用

outfile.write( file1.read() )
outfile.write( file2.read() )

答案 3 :(得分:0)

在了解上下文管理器的基础上,对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)