【python小操作】修改文件任意位置的內容
Python基本文件操作
讀入文件:
f = open(‘test.txt’,’r’)
寫入文件:
F = open(‘output.txt’,’w’)
注意!如果你想讀文件,卻寫錯了關鍵字,把’r’寫成’w’,並運行了程式,那麼你的文件就會變成空白的,因為你什麼都沒有寫入。
修改文件裡面指定行的內容:
比如你用程式碼實現了自動生成文字和符號,但是迫於格式要求,很多符號都是成對出現的,而且在生成完文字之後,很難再回撤,比如我就遇到這樣的情況:
背景:
在yolo自動檢測視訊中的行人的時候,獲取到了每一幀的幀序號,行人的座標,而後這些座標需要讀入道VOTT(一款視訊標註工具)裡面進行細微矯正,所以需要轉換成json格式,然後json格式..你懂的,中括號花括號,逗號都不能錯,好說歹說我終於把自動轉換格式的功能做出來了,也就是:從
到:
可以看到,我把每一幀裡每一個行人的座標都表示成json的格式了,但是格式轉換之後有個問題,在倒數第三行的地方,多了個逗號:
不要看它只是一個小小的逗號,但是有這個逗號,VOTT就讀不出來,沒有逗號就讀取成功,所以程式設計也是一份一絲不苟的工作呀~~
不就一個小逗號麼?把它刪了就OK啦~~
我也是這麼想的,但是跟我交接的同事不這麼認為,硬是要我把這個逗號自動去除掉,於是就有了今天的這次分享~
實現
首先建立兩個檔案讀取函式f1和f2,f1負責讀檔案資訊,f2寫新檔案資訊,通過一讀一寫,實現指定內容的修改。首先f1讀取這個json文件,然後一行一行地讀,如果這一行不用改內容,就發直接寫入新檔案;如果這一行需要做內容更改,可以直接更改或者用文字替換的方式進行更改(為滿足不同程式的自適應要求,多采用文字替換的方式),設定要替換的文字old_str和新文字new_str,進行內容替換,並完成其餘行的檔案讀寫。
原始碼如下:
import os
file=’output.json’
old_str = '}],'
new_str = '}]'
#由於我只想把最後一個逗號去掉,所以新字串比舊字串少個逗號
#這裡要確保只匹配到你想要更改的字串,否則整一行符合條件的都會被替換掉
def alter(file,old_str,new_str):
total_count =0 #文件的總行數
count = 0 #目標行數
with open(file) as f:
for line in f:
total_count = total_count + 1
with open(file, "r", encoding="utf-8") as f1, \
open("%s.bak" % file, "w", encoding="utf-8") as f2:
for line in f1:
count = count+1
if count == total_count-2:如果當前行是倒數第三行,執行替換操作
if old_str in line:
line = line.replace(old_str, new_str)
f2.write(line)
else:
f2.write(line)
os.remove(file)
os.rename("%s.bak" % file, file)
好了,這樣就愉快地實現了自動化的格式轉換並直接能被VOTT識別啦~
最後放上一張VOTT載入YOLO檢測的行人座標的截圖:
歡迎關注“pyhon修煉之道”,我們將持續更新新鮮python相關文章~