Harap (seperti biasa) ikuti pedoman pertanyaan umum , nyatakan batasan khusus, tunjukkan apa yang telah Anda coba sejauh ini, dan tanyakan tentang apa yang secara spesifik membingungkan Anda.
18
Tolong, tandai juga pekerjaan rumah Anda dengan tag [pekerjaan rumah].
"t" untuk mode teks hanya untuk Python 3. Selain itu, Anda menyediakan pengelola konteks untuk file ouput Anda, tetapi gagal menutup file masukan Anda, yang tampaknya tidak konsisten.
Uh, tidak menyadari ini di tag dengan "PR". Saya tidak akan menghapus jawaban saya tetapi akan lebih berhati-hati di masa mendatang
Gareth Davidson
21
"memberikan jawaban untuk masalah pekerjaan rumah" adalah komentar yang sangat bodoh. Jika seseorang membutuhkan bantuan maka bantu mereka. Tidak semua orang ingin melakukan HW mereka, beberapa benar-benar ingin mempelajari sesuatu ...
KingMak
5
Saya memang membutuhkan ini untuk pekerjaan rumah dan itu sangat membantu saya
mikeybeck
78
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 withblok 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 notin s:print('"{old_string}" not found in {filename}.'.format(**locals()))return# Safely write the changed content, if found in the filewith 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 withpernyataan.
OP menyebut "kemunculan" ini berarti, meskipun itu adalah substring - yang tidak akan berfungsi untuk contoh Anda.
Durdu
7
with open('Stud.txt','r')as f:
newlines =[]for line in f.readlines():
newlines.append(line.replace('A','Orange'))with open('Stud.txt','w')as f:for line in newlines:
f.write(line)
from pathlib importPath
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_textdan write_text.
Jika Anda menginginkan perubahan yang lebih kompleks daripada penggantian tunggal, Anda akan menetapkan hasil dari read_textke 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.
write_text tidak berfungsi untuk saya. Itu tidak memperbarui file
Anurag
0
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)
Jawaban:
sumber
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.Perlu disebutkan bahwa jika nama file berbeda, kami dapat melakukan ini dengan lebih elegan dengan satu
with
pernyataan.sumber
sumber
Sesuatu seperti
sumber
sumber
Jika Anda menggunakan linux dan hanya ingin mengganti kata
dog
dengan,cat
Anda dapat melakukan:text.txt:
Perintah Linux:
Keluaran:
Posting Asli: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
sumber
Menggunakan pathlib ( https://docs.python.org/3/library/pathlib.html )
Jika file input dan output berbeda, Anda akan menggunakan dua variabel berbeda untuk
read_text
danwrite_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 denganwrite_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.
sumber
cara termudah adalah melakukannya dengan ekspresi reguler, dengan asumsi Anda ingin mengulang setiap baris dalam file (di mana 'A' akan disimpan) Anda lakukan ...
sumber