2011-08-25 17 views
10

मुझे फ़ाइल में पढ़ना है, यहां और वहां टेक्स्ट के अनुभागों को बदलना है, और फिर उसी फ़ाइल में लिखें।फ़ाइल में पढ़ें - सामग्री बदलें - उसी फ़ाइल में लिखें

वर्तमान में मैं कार्य करें:

f = open(file) 
file_str = f.read() # read it in as a string, Not line by line 
f.close() 
# 
# do_actions_on_file_str 
# 
f = open(file, 'w') # to clear the file 
f.write(file_str) 
f.close() 

लेकिन मैं कल्पना कर सकते हैं एक और अधिक pythonic दृष्टिकोण है कि एक ही परिणाम पैदावार होती है।

सुझाव?

उत्तर

16

यह पहले से ही स्पष्ट और स्पष्ट दिखता है। कोई भी सुझाव इस बात पर निर्भर करता है कि फाइलें कितनी बड़ी हैं। अगर वास्तव में बहुत अच्छा नहीं लगता है। यदि वास्तव में बड़ा है, तो आप भाग में संसाधित कर सकते हैं।

लेकिन स्पष्ट बंद होने से बचने के लिए आप एक संदर्भ प्रबंधक का उपयोग कर सकते हैं।

with open(filename) as f: 
    file_str = f.read() 

# do stuff with file_str 

with open(filename, "w") as f: 
    f.write(file_str) 
+3

अपडेट कर दूंगा, मुझे यकीन नहीं है कि मैं आम तौर पर टेक्स्ट मोड में पढ़ने और बाइनरी में लिखने का सुझाव दूंगा, हालांकि मैं नियमित रूप से इस तरह की चीज करता हूं (केवल कल सहित) । –

+0

@ डैश ओह हाँ, मैंने बस उसमें फेंक दिया। यह वास्तव में मेरे मंच पर कोई फर्क नहीं पड़ता है। ;-) – Keith

+0

हाँ लेकिन यह यूनिकोड तारों के साथ अंतर बनाता है। –

4

आप लाइन द्वारा लाइन काम करते हैं आप inplace मोड

import fileinput 

for line in fileinput.input(mifile, inplace=1): 
    print process(line) 

साथ fileinput उपयोग कर सकते हैं आप एक बार में सभी पाठ को संसाधित करने की आवश्यकता है, तो अपने कोड है कि बंद करने का ख्याल रखता है with का उपयोग कर एक सा अनुकूलित किया जा सकता है फ़ाइल:

with open(myfile) as f: 
    file_str = f.read() 
# 
do_actions_on_file_str 
# 
with open(myfile, 'w') as f: 
    f.write(file_str) 
+0

मैं वास्तव में regex सामान करते हैं, इतने पर पूरी फाइल मैं देख सकता हूं कि मेरा प्रश्न इस बात को कैसे प्रतिबिंबित नहीं करता है, मैं इसे – pseudosudo

-3

आप एक बार में सभी पाठ को संसाधित करने की आवश्यकता है, तो अपने कोड थोड़ा उस के साथ का उपयोग कर अनुकूलित किया जा सकता है फ़ाइल को बंद करने का ख्याल रखता है:

with open(myfile) as f: 
    file_str = f.read() 
# 
do_actions_on_file_str 
# 
with open(myfile, 'w') as f: 
    f.write(file_str) 
+1

ऐसा लगता है कि @joaquin ने 2011 में पोस्ट किया था। –

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