2009-03-18 15 views
18

मैं पर एक पायथन स्क्रिप्ट का उपयोग कर रहा हूं किसी दिए गए निर्देशिका की टेक्स्ट फ़ाइलों में कुछ स्ट्रिंग्स को ढूंढ और प्रतिस्थापित करता हूं। मैं fileinput मॉड्यूल का उपयोग कर-और-प्रतिस्थापन ऑपरेशन को कम करने के लिए उपयोग कर रहा हूं, यानी, फ़ाइल पढ़ी जाती है, टेक्स्ट बदल दिया जाता है और उसी फ़ाइल में लिखा जाता है।पायथन: न्यूलाइन अक्षरों को जोड़ने से फ़ाइल इनपुट को रोकें

कोड इस प्रकार दिखता है:

  1. एक रिक्त पंक्ति हर पंक्ति के बाद डाला:

    import fileinput 
    def fixFile(fileName): 
        # Open file for in-place replace 
        for line in fileinput.FileInput(fileName, inplace=1): 
         line = line.replace("findStr", "replaceStr") 
         print line # Put back line into file 
    

    समस्या यह है कि लिखा फ़ाइलें है।

  2. के अंत में Ctrl-M वर्ण प्रत्येक लाइन।

मैं इन अतिरिक्त परिशिष्टों को फ़ाइलों में डालने से कैसे रोकूं?

उत्तर

31

आपका नई-पंक्तियों प्रिंट समारोह से आ रहे हैं

उपयोग:

import sys 

sys.stdout.write ('some stuff') 

और अपने पंक्ति विराम दूर जाना होगा

+1

बहुत बहुत धन्यवाद! यह अतिरिक्त लाइनों और Ctrl-M दोनों वर्णों को ठीक करता है। मैंने इस समस्या के समाधान के रूप में आपका उत्तर चुना है। आगे बढ़ें और यदि आप चाहें तो अपने उत्तर में कुछ अतिरिक्त जानकारी जोड़ें। –

+1

क्या आप थोड़ा विस्तार जोड़ सकते हैं? :) – Pitto

11

उपयोग

print line, 

या

file.write(line) 

अतिरिक्त नई पंक्तियां ठीक करने के लिए।

[Ctrl] - [M] के रूप में - शायद यह डॉस एन्कोडिंग में इनपुट फ़ाइलों के कारण होता है।

+0

धन्यवाद। आपका समाधान रिक्त रेखाओं को हटा देता है लेकिन अभी भी Ctrl-M वर्ण हैं।एक अन्य व्यक्ति ने पहले से ही एक उत्तर सुझाया है जो मेरे लिए दोनों हल करता है। –

7
इसके बजाय इस बात का

:

print line # Put back line into file 

उपयोग करें:

print line, # Put back line into file 
6

बदलें पाश के लिए करने के लिए अपने में पहली पंक्ति:

line = line.rstrip().replace("findStr", "replaceStr")

+0

कृपया नीचे वोट की व्याख्या करें। यह विधि न्यूलाइन समस्या को संबोधित करती है (हालांकि मैं Ctrl-M समस्या को पुन: उत्पन्न करने में सक्षम नहीं था, इसलिए इससे बात नहीं कर सकता)। – kmote

+1

इस उत्तर में समस्या यह है कि यह अनिवार्य रूप से एक "हैक" है, केवल पहली जगह में एक अतिरिक्त जोड़ने से बचने के बजाय मूल न्यूलाइन को हटा रहा है (आपके द्वारा पोस्ट किए जाने से एक साल पहले अन्य उत्तरों द्वारा कवर किया गया है!)। शायद यही कारण है कि आप डाउनवॉट्स क्यों प्राप्त कर चुके हैं। –

0

हर यात्रा प्रिंट बयान के कारण न्यू लाइन के साथ समाप्त होता है, तो आप लाइनों के बीच रिक्त पंक्ति हो रही है।

इस समस्या को दूर करने के लिए, आप प्रिंट के साथ स्ट्रिप का उपयोग कर सकते हैं।

import fileinput 
def fixFile(fileName): 
    for line in fileinput.FileInput(fileName, inplace=1): 
    line = line.replace("findStr", "replaceStr") 
    print line.strip() 

अब, आप रिक्त रेखाएं धारीदार देख सकते हैं।

+0

यह इंडेंटेशन को भी हटा देगा, हालांकि, जो वांछित नहीं हो सकता है। इसके बजाय rstrip() का उपयोग करें :) – mjd2

2

अजगर 4.3 पर अद्यतन के लिए, आप बस का उपयोग कर सकते हैं:

print(line, end = '') 

एक नई लाइन की प्रविष्टि से बचने के लिए।

+6

पायथन ** 4.3 ** ?? :) – errata

संबंधित मुद्दे