मुझे इस तरह की स्थितियों में चिंताओं को अलग करना पसंद है - मुझे लगता है कि यह वास्तव में कोड क्लीनर को बनाए रखने में आसान बनाता है, और अधिक कुशल हो सकता है।
यहां आपको 3 चिंताएं हैं: यूटीएफ -8 फ़ाइल पढ़ना, लाइनों को संसाधित करना और यूटीएफ -8 फ़ाइल लिखना। मान लें कि आपकी प्रसंस्करण लाइन-आधारित है, यह पूरी तरह से पाइथन में काम करती है, क्योंकि फ़ाइल की रेखाओं पर खुलने और पुनरावृत्ति करने से भाषा में बनाया जाता है। साथ ही स्पष्ट होने के नाते, यह भी अधिक कुशल है क्योंकि यह आपको बड़ी फ़ाइलों को संसाधित करने की अनुमति देता है जो स्मृति में फिट नहीं होते हैं। अंत में, यह आपको अपने कोड का परीक्षण करने का एक शानदार तरीका प्रदान करता है - क्योंकि प्रसंस्करण फ़ाइल से अलग किया जाता है, यह आपको यूनिट परीक्षण लिखने देता है, या यहां तक कि केवल पाठ पाठ पर प्रसंस्करण कोड चलाता है और फ़ाइलों के साथ झुकाव के बिना आउटपुट की मैन्युअल रूप से समीक्षा करता है।
मैं उदाहरण के प्रयोजनों के लिए लाइनों को ऊपरी मामले में परिवर्तित कर रहा हूं - संभवतः आपकी प्रसंस्करण अधिक दिलचस्प होगी। मुझे उपज का उपयोग करना पसंद है - यह प्रसंस्करण के लिए अतिरिक्त लाइनों को हटाने या डालने में आसान बनाता है हालांकि इसका उपयोग मेरे छोटे उदाहरण में नहीं किया जा रहा है।
def process(lines):
for line in lines:
yield line.upper()
with codecs.open(file1, 'r', 'utf-8') as infile:
with codecs.open(file2, 'w', 'utf-8') as outfile:
for line in process(infile):
outfile.write(line)
स्रोत
2010-11-06 12:54:26
"फ़ाइल को ओवरराइट नहीं किया जाना चाहिए"। यदि आप एक फाइल पढ़ रहे हैं और एक नई फाइल लिख रहे हैं तो केवल एक ही खुला क्यों है? –
क्योंकि यह एक अधूरा कोड है। ... – Gusto
"क्योंकि यह एक अधूरा कोड है"? क्या? "अधूरा" आपकी आवश्यकताओं और आपके कोड के बीच विसंगति के लिए एक अच्छा स्पष्टीकरण नहीं है। केवल एक खुला क्यों है? अपनी आवश्यकताओं को थोड़ा बेहतर तरीके से मेल करने के लिए कृपया अपना कोड ठीक करें। –