ฉันจะเปิดไฟล์ 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ในตัวอย่างนี้ซึ่งจะปิดไฟล์หลังจากที่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>
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)
หากคุณใช้ linux และต้องการแทนที่คำdog
ด้วยcat
คุณสามารถทำได้:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
คำสั่ง Linux:
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-using-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
ตัวแปรที่จะประมวลผลและบันทึกเนื้อหาใหม่ให้กับตัวแปรอื่นแล้วบันทึกเนื้อหาใหม่ด้วย
หากไฟล์ของคุณมีขนาดใหญ่คุณต้องการวิธีการที่ไม่อ่านไฟล์ทั้งหมดในหน่วยความจำ แต่ให้ประมวลผลทีละบรรทัดตามที่ Gareth Davidson แสดงในคำตอบอื่น ( https://stackoverflow.com/a/4128192/3981273 ) ซึ่งแน่นอนว่าต้องใช้ไฟล์สองไฟล์ที่แตกต่างกันสำหรับอินพุตและเอาต์พุต
วิธีที่ง่ายที่สุดคือทำด้วยนิพจน์ทั่วไปสมมติว่าคุณต้องการวนซ้ำในแต่ละบรรทัดในไฟล์ (โดยที่ 'A' จะถูกเก็บไว้) คุณทำ ...
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)