Python基本文檔操作
讀入文檔:
f = open(‘test.txt’,’r’)
寫入文檔:
F = open(‘output.txt’,’w’)
注意结执!如果你想讀文檔痹雅,卻寫錯了關(guān)鍵字留凭,把’r’寫成’w’酸钦,并運行了程序,那么你的文檔就會變成空白的顽爹,因為你什么都沒有寫入到逊。
修改文檔里面指定行的內(nèi)容:
比如你用代碼實現(xiàn)了自動生成文本和符號,但是迫于格式要求黔寇,很多符號都是成對出現(xiàn)的偶器,而且在生成完文本之后,很難再回撤缝裤,比如我就遇到這樣的情況:
背景:
在yolo自動檢測視頻中的行人的時候屏轰,獲取到了每一幀的幀序號,行人的坐標(biāo)憋飞,而后這些坐標(biāo)需要讀入道VOTT(一款視頻標(biāo)注工具)里面進行細微矯正霎苗,所以需要轉(zhuǎn)換成json格式,然后json格式..你懂的榛做,中括號花括號唁盏,逗號都不能錯,好說歹說我終于把自動轉(zhuǎn)換格式的功能做出來了检眯,也就是:從
到:
可以看到厘擂,我把每一幀里每一個行人的坐標(biāo)都表示成json的格式了,但是格式轉(zhuǎn)換之后有個問題轰传,在倒數(shù)第三行的地方驴党,多了個逗號:
不要看它只是一個小小的逗號,但是有這個逗號获茬,VOTT就讀不出來港庄,沒有逗號就讀取成功倔既,所以編程也是一份一絲不茍的工作呀~~
不就一個小逗號么?把它刪了就OK啦~~
我也是這么想的鹏氧,但是跟我交接的同事不這么認為渤涌,硬是要我把這個逗號自動去除掉,于是就有了今天的這次分享~
實現(xiàn)
首先創(chuàng)建兩個文件讀取函數(shù)f1和f2把还,f1負責(zé)讀文件信息实蓬,f2寫新文件信息,通過一讀一寫吊履,實現(xiàn)指定內(nèi)容的修改安皱。首先f1讀取這個json文檔,然后一行一行地讀艇炎,如果這一行不用改內(nèi)容酌伊,就發(fā)直接寫入新文件;如果這一行需要做內(nèi)容更改缀踪,可以直接更改或者用文本替換的方式進行更改(為滿足不同程序的自適應(yīng)要求居砖,多采用文本替換的方式),設(shè)定要替換的文本old_str和新文本new_str,進行內(nèi)容替換驴娃,并完成其余行的文件讀寫奏候。
源代碼如下:
import os
file=’output.json’
old_str = '}],'
new_str = '}]'
#由于我只想把最后一個逗號去掉,所以新字符串比舊字符串少個逗號
#這里要確保只匹配到你想要更改的字符串唇敞,否則整一行符合條件的都會被替換掉
def alter(file,old_str,new_str):
???total_count =0? #文檔的總行數(shù)
???count = 0? #目標(biāo)行數(shù)
???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:如果當(dāng)前行是倒數(shù)第三行蔗草,執(zhí)行替換操作
??????????????? 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)
好了,這樣就愉快地實現(xiàn)了自動化的格式轉(zhuǎn)換并直接能被VOTT識別啦~
最后放上一張VOTT載入YOLO檢測的行人坐標(biāo)的截圖:
歡迎關(guān)注“pyhon修煉之道”厚棵,我們將持續(xù)更新新鮮python相關(guān)文章~