1. 程式人生 > >【python小操作】修改文件任意位置的內容

【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相關文章~