Bir dosyayı (Stud.txt) nasıl açabilirim ve ardından "A" nın tekrarlarını "Orange" ile değiştirebilirim?
Bir dosyayı (Stud.txt) nasıl açabilirim ve ardından "A" nın tekrarlarını "Orange" ile değiştirebilirim?
Yanıtlar:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
Aynı dosyadaki dizeleri değiştirmek isterseniz, muhtemelen içeriğini yerel bir değişkene okumanız, kapatmanız ve yazmak için yeniden açmanız gerekir:
Bu örnekte, blok sonlandırıldıktan sonra dosyayı kapatan with ifadesini kullanıyorum with
- normalde son komutun yürütülmesi bittiğinde veya bir istisna ile.
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)
Dosya adları farklı olsaydı, bunu tek bir with
ifadeyle daha zarif bir şekilde yapabilirdik .
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Gibi bir şey
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Eğer linux vardır ve sadece kelimeyi değiştirmek istiyorsanız dog
ile cat
bunu yapabilirsiniz:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Linux Komutu:
sed -i 's/dog/cat/g' test.txt
Çıktı:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Orijinal Gönderi: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
Pathlib'i kullanma ( 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'))
Giriş ve çıkış dosyaları farklı olsaydı sizin için iki farklı değişkenler kullanır read_text
ve write_text
.
Tek bir değiştirmeden daha karmaşık bir değişiklik istiyorsanız, sonucunu read_text
bir değişkene atar, işler ve yeni içeriği başka bir değişkene kaydeder ve ardından yeni içeriği ile kaydedersiniz write_text
.
Dosyanız büyükse, tüm dosyayı bellekte okumayan, bunun yerine Gareth Davidson tarafından başka bir yanıtta gösterildiği gibi satır satır işleyen bir yaklaşımı tercih edersiniz ( https://stackoverflow.com/a/4128192/3981273 ) , tabii ki giriş ve çıkış için iki farklı dosya kullanmayı gerektirir.
en kolay yol, bunu dosyadaki her satırı yinelemek istediğiniz varsayılarak (burada 'A' nın saklanacağı) normal ifadelerle yapmaktır.
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)