Bagaimana cara membuka file, Stud.txt, dan kemudian mengganti kemunculan "A" dengan "Oranye"?
Bagaimana cara membuka file, Stud.txt, dan kemudian mengganti kemunculan "A" dengan "Oranye"?
Jawaban:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
Jika Anda ingin mengganti string dalam file yang sama, Anda mungkin harus membaca isinya menjadi variabel lokal, menutupnya, dan membukanya kembali untuk menulis:
Saya menggunakan pernyataan with dalam contoh ini, yang menutup file setelah with
blok diakhiri - baik secara normal ketika perintah terakhir selesai dijalankan, atau dengan pengecualian.
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)
Perlu disebutkan bahwa jika nama file berbeda, kami dapat melakukan ini dengan lebih elegan dengan satu with
pernyataan.
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Sesuatu seperti
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Jika Anda menggunakan linux dan hanya ingin mengganti kata dog
dengan, cat
Anda dapat melakukan:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Perintah Linux:
sed -i 's/dog/cat/g' test.txt
Keluaran:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Posting Asli: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
Menggunakan 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'))
Jika file input dan output berbeda, Anda akan menggunakan dua variabel berbeda untuk read_text
dan write_text
.
Jika Anda menginginkan perubahan yang lebih kompleks daripada penggantian tunggal, Anda akan menetapkan hasil dari read_text
ke variabel, memprosesnya dan menyimpan konten baru ke variabel lain, lalu menyimpan konten baru dengan write_text
.
Jika file Anda besar, Anda lebih memilih pendekatan yang tidak membaca seluruh file di memori, tetapi memprosesnya baris demi baris seperti yang ditunjukkan oleh Gareth Davidson di jawaban lain ( https://stackoverflow.com/a/4128192/3981273 ) , yang tentu saja membutuhkan dua file berbeda untuk input dan output.
cara termudah adalah melakukannya dengan ekspresi reguler, dengan asumsi Anda ingin mengulang setiap baris dalam file (di mana 'A' akan disimpan) Anda lakukan ...
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)