ฉันไม่เห็นวิธีแก้ปัญหาของงูหลามดังนั้นนี่คือ:
import sys
import os
def open_and_replace(filename):
with open(filename) as read_file:
temp = open("/tmp/temp.txt","w")
for index,line in enumerate(read_file,1):
if index == 5:
temp.write("NEW STRING\n")
else:
temp.write(line.strip() + "\n")
temp.close()
os.rename("/tmp/temp.txt",filename)
for file_name in sys.argv[1:]:
open_and_replace(file_name)
แนวคิดพื้นฐานคือสำหรับแต่ละไฟล์ที่ให้ไว้ในบรรทัดคำสั่งเป็นอาร์กิวเมนต์เราเขียนไฟล์ชั่วคราวและระบุแต่ละบรรทัดในไฟล์ต้นฉบับ หากดัชนีของเส้นเป็น 5 เราจะเขียนบรรทัดที่แตกต่างกัน ที่เหลือก็แค่แทนที่ไฟล์เก่าด้วยไฟล์ temp Demo:
$> ls
file1.txt file2.txt file3.txt
$> cat file1.txt
line 1
line 2
line 3
line 4
GOOD MORNING
line 6
$> python ~/replace_5th_line.py file1.txt file2.txt file3.txt
$> cat file1.txt
line 1
line 2
line 3
line 4
NEW STRING
line 6
$> cat file2.txt
line 1
line 2
line 3
line 4
NEW STRING
line 6
เดียวกันสามารถทำได้ด้วยความเข้าใจในรายการ ด้านล่างเป็นหนึ่งในสายการบินของสคริปต์เดียวกัน:
cat /etc/passwd | python -c 'import sys; print "\n".join(["CUSTOM" if index == 5 else line.strip() for index,line in enumerate(sys.stdin,1)])'
หรือไม่ cat
python -c 'import sys; print "\n".join(["CUSTOM" if index == 5 else line.strip() for index,line in enumerate(sys.stdin,1)])' < /etc/passwd
สิ่งที่เหลืออยู่ก็คือการเปลี่ยนเส้นทางของเนื้อหาที่แก้ไขไปยังไฟล์อื่นด้วย > output.txt