मैं एक फ़ाइल कैसे खोल सकता हूं, Stud.txt, और फिर "A" की किसी भी घटना को "Orange" से बदल सकता हूं?
मैं एक फ़ाइल कैसे खोल सकता हूं, Stud.txt, और फिर "A" की किसी भी घटना को "Orange" से बदल सकता हूं?
जवाबों:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
यदि आप तार को उसी फ़ाइल में बदलना चाहते हैं, तो आपको संभवतः इसकी सामग्री को स्थानीय चर में पढ़ना होगा, इसे बंद करना होगा और इसे फिर से लिखना होगा:
मैं इस उदाहरण में बयान के साथ उपयोग कर रहा हूं , जो with
ब्लॉक समाप्त होने के बाद फाइल को बंद कर देता है - या तो सामान्य रूप से जब अंतिम कमांड निष्पादित करता है, या एक अपवाद द्वारा।
def inplace_change(filename, old_string, new_string):
# Safely read the input filename using 'with'
with open(filename) as f:
s = f.read()
if old_string not in s:
print('"{old_string}" not found in {filename}.'.format(**locals()))
return
# Safely write the changed content, if found in the file
with open(filename, 'w') as f:
print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
s = s.replace(old_string, new_string)
f.write(s)
यह ध्यान देने योग्य है कि अगर फ़ाइल नाम अलग थे, तो हम एक ही with
बयान के साथ और अधिक सुरुचिपूर्ण ढंग से कर सकते थे ।
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
कुछ इस तरह
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
यदि आप लिनक्स पर कर रहे हैं और सिर्फ शब्द बदलना चाहते हैं dog
के साथ cat
आप कर सकते हैं:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
लिनक्स कमांड:
sed -i 's/dog/cat/g' test.txt
आउटपुट:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
मूल पोस्ट: /ubuntu/20414/find-and-replace-text-within-a-file-use-commands
Pathlib ( https://docs.python.org/3/library/pathlib.html ) का उपयोग करना
from pathlib import Path
file = Path('Stud.txt')
file.write_text(file.read_text().replace('A', 'Orange'))
यदि इनपुट और आउटपुट फाइलें अलग-अलग थीं, तो आप दो अलग-अलग चर का उपयोग करेंगे read_text
और write_text
।
यदि आप एक एकल प्रतिस्थापन की तुलना में अधिक जटिल परिवर्तन चाहते थे, तो आप read_text
एक चर के परिणाम को असाइन करेंगे , इसे संसाधित करेंगे और नई सामग्री को दूसरे चर में सहेजेंगे, और फिर नई सामग्री को सहेजेंगे write_text
।
यदि आपकी फ़ाइल बड़ी थी, तो आप एक ऐसा तरीका पसंद करेंगे, जो पूरी फ़ाइल को मेमोरी में न पढ़े, बल्कि इसे अन्य पंक्ति में गारेथ डेविडसन द्वारा शो के रूप में लाइन द्वारा प्रोसेस करें ( https://stackoverflow.com/a/4128192/3981273 ) , जो निश्चित रूप से इनपुट और आउटपुट के लिए दो अलग-अलग फ़ाइलों का उपयोग करने की आवश्यकता है।
सबसे आसान तरीका यह है कि आप इसे नियमित अभिव्यक्तियों के साथ करें, यह मानते हुए कि आप फ़ाइल में प्रत्येक पंक्ति पर पुनरावृति करना चाहते हैं (जहां 'ए' संग्रहीत किया जाएगा) आप करते हैं ...
import re
input = file('C:\full_path\Stud.txt), 'r')
#when you try and write to a file with write permissions, it clears the file and writes only #what you tell it to the file. So we have to save the file first.
saved_input
for eachLine in input:
saved_input.append(eachLine)
#now we change entries with 'A' to 'Orange'
for i in range(0, len(old):
search = re.sub('A', 'Orange', saved_input[i])
if search is not None:
saved_input[i] = search
#now we open the file in write mode (clearing it) and writing saved_input back to it
input = file('C:\full_path\Stud.txt), 'w')
for each in saved_input:
input.write(each)