2009-06-16 18 views
33

मेरे पास एकाधिक (40 से 50 के बीच) एमपी 3 फ़ाइलें हैं जिन्हें मैं एक फ़ाइल में जोड़ना चाहता हूं। पायथन में ऐसा करने का सबसे अच्छा तरीका क्या है?मैं पायथन में फ़ाइलों को कैसे जोड़ूं?

प्रत्येक फ़ाइल की प्रत्येक पंक्ति के माध्यम से लूप करने के लिए fileinput मॉड्यूल का उपयोग करें और इसे आउटपुट फ़ाइल में लिखें? विंडोज copy कमांड के लिए आउटसोर्स?

+0

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

उत्तर

44

उन फ़ाइलों में बाइट्स को एक साथ रखना आसान है ... हालांकि मुझे यकीन नहीं है कि इससे लगातार खेलना होगा - मुझे लगता है कि यह फाइलें एक ही बिटरेट का उपयोग कर रही हैं, लेकिन मुझे यकीन नहीं है।

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

कि सी में सभी एमपी 3 फ़ाइलों के सभी बाइट्स के साथ एक एकल "everything.mp3" फ़ाइल पैदा करेगा: \ संगीत एक साथ concatenated।

आप आदेश पंक्ति में फ़ाइलों के नाम पास करना चाहते हैं, तो आप sys.argv[1:] बजाय iglob(...), आदि

+0

आपको पूर्ण नाम चरण की आवश्यकता नहीं है वहां, ग्लोब पहले से ही पूर्ण फ़ाइल नामों का उत्पादन कर रहा है। – SilentGhost

+0

और आप glob – SilentGhost

+0

@SilentGhost की बजाय iglob का उपयोग कर सकते हैं: धन्यवाद, निश्चित – nosklo

5

हम्म उपयोग कर सकते हैं। मैं "लाइनों" का उपयोग नहीं करूंगा। त्वरित और गंदे उपयोग

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

;)

+0

अंत में बंद कर दें, हालांकि यह बहुत बड़ी मक्खियों के लिए काम नहीं करेगा। –

+2

हाँ, मुझे पता है। परंतु। मैंने "त्वरित और गंदा" लिखा था। इसका तात्पर्य है: गारंटी के बिना ... – tuergeist

32

बस संक्षेप में प्रस्तुत करने के लिए (और 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 
संबंधित मुद्दे