Làm cách nào để mở một tệp, Stud.txt và sau đó thay thế bất kỳ lần xuất hiện nào của "A" bằng "Orange"?
Làm cách nào để mở một tệp, Stud.txt và sau đó thay thế bất kỳ lần xuất hiện nào của "A" bằng "Orange"?
Câu trả lời:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
Nếu bạn muốn thay thế các chuỗi trong cùng một tệp, bạn có thể phải đọc nội dung của nó thành một biến cục bộ, đóng nó và mở lại để viết:
Tôi đang sử dụng câu lệnh with trong ví dụ này, câu lệnh này sẽ đóng tệp sau khi with
khối kết thúc - thông thường khi lệnh cuối cùng kết thúc thực thi hoặc bằng một ngoại lệ.
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)
Điều đáng nói là nếu các tên tệp khác nhau, chúng ta có thể thực hiện điều này một cách thanh lịch hơn với một with
câu lệnh duy nhất .
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Cái gì đó như
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Nếu bạn đang sử dụng Linux và chỉ muốn thay thế từ này dog
bằngcat
bạn có thể làm:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Lệnh Linux:
sed -i 's/dog/cat/g' test.txt
Đầu ra:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Bài đăng gốc: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
Sử dụng 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'))
Nếu các tệp đầu vào và đầu ra khác nhau, bạn sẽ sử dụng hai biến khác nhau cho read_text
và write_text
.
Nếu bạn muốn một thay đổi phức tạp hơn một thay thế đơn lẻ, bạn sẽ gán kết quả của read_text
cho một biến, xử lý nó và lưu nội dung mới vào một biến khác, sau đó lưu nội dung mới với write_text
.
Nếu tệp của bạn lớn, bạn sẽ thích một cách tiếp cận không đọc toàn bộ tệp trong bộ nhớ, mà xử lý từng dòng một như hiển thị của Gareth Davidson trong một câu trả lời khác ( https://stackoverflow.com/a/4128192/3981273 ) , tất nhiên yêu cầu sử dụng hai tệp riêng biệt cho đầu vào và đầu ra.
cách dễ nhất là làm điều đó với các biểu thức chính quy, giả sử rằng bạn muốn lặp lại từng dòng trong tệp (nơi 'A' sẽ được lưu trữ) bạn thực hiện ...
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)