2009-06-16 39 views
33

Tôi có nhiều tệp MP3 (từ 40 đến 50) mà tôi muốn nối vào một tệp. Cách tốt nhất để làm điều này bằng Python là gì?Làm cách nào để ghép nối các tệp bằng Python?

Sử dụng mô-đun fileinput để lặp qua từng dòng của mỗi tệp và ghi nó vào tệp đầu ra? Thuê ngoài đến cửa sổ copy lệnh?

+0

http://stackoverflow.com/a/27077437/1157720 – sajjadG

Trả lời

44

Việc đặt các byte trong các tệp đó với nhau thật dễ dàng ... tuy nhiên tôi không chắc liệu điều đó có gây ra sự phát liên tục - tôi nghĩ có thể nếu các tệp đang sử dụng cùng tốc độ bit, nhưng tôi không chắc chắn.

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() 

Điều đó sẽ tạo một tệp "everything.mp3" duy nhất với tất cả byte của tất cả các tệp mp3 trong C: \ nhạc được ghép nối với nhau.

Nếu bạn muốn vượt qua những cái tên của các tập tin trong dòng lệnh, bạn có thể sử dụng sys.argv[1:] thay vì iglob(...) vv

+0

bạn không cần bước đầy đủ ở đó, glob đã sản xuất tên tập tin tuyệt đối. – SilentGhost

+0

và bạn có thể sử dụng iglob, thay vì glob – SilentGhost

+0

@SilentGhost: Cảm ơn, đã sửa – nosklo

5

Hmm. Tôi sẽ không sử dụng "dòng". Nhanh chóng và bẩn sử dụng

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

;)

+0

Mặc dù điều này không hiệu quả đối với ruồi rất lớn. –

+2

Vâng, tôi biết. Nhưng. Tôi viết "nhanh và bẩn". Điều đó ngụ ý: không có bảo lãnh ... – tuergeist

32

Chỉ cần tóm tắt (và ăn cắp từ nosklo's answer), để nối hai tập tin bạn cần làm:

destination = open(outfile,'wb') 
shutil.copyfileobj(open(file1,'rb'), destination) 
shutil.copyfileobj(open(file2,'rb'), destination) 
destination.close() 

Đây là giống như:

cat file1 file2 > destination 
Các vấn đề liên quan