文件讀寫與字符串替換

前段時間寫了個 py 腳本,替換目錄中所有文件中的字符串,但是會出現問題,如果用短字符串替換長字符串就會出現最後出現一些原有文件的遺留,原來文件內容不會清除,而是以覆蓋的形式替換,查了下有 truncate(size) 函數,用以從首字節開始截斷 size 大小(默認截斷所有),就解決了。

#!/usr/bin/env python3

import os
import sys
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("file_directory", help="the directory contain files you want replace", default="")
    parser.add_argument("source_str", help="the source string you want replace", default="")
    parser.add_argument("destination_str", help="the destination string you want replace to", default="")
    args = parser.parse_args()
    file_dir = args.file_directory
    
    files = os.listdir(file_dir)
    for per_file in files:
        file_path = file_dir + "/" + per_file
        f = open(file_path, 'r+')
        s = f.read()
        f.seek(0, 0)
        f.truncate()
        f.write(s.replace(args.source_str, args.destination_str))
        f.close()

然後還不如 linux sed 命令來的方便:

grep -rl "Source string" . | xargs -n1 sed -i "s/Source string/Destination string/g"

讀寫模式主要有以下:

訪問模式 意義
r
w 覆蓋寫,文件不存在會進行創建。
a 附加寫,文件不存在會進行創建。
r+ 讀 + 寫。
w+ 讀 + 寫,文件不存在會進行創建。
a+ 讀 + 附加寫,文件不存在會進行創建。

多了 “b”,就是用來表示二進制讀寫

sed 命令

替換:s
全局:g
全局替換:替換文件中所有包含 source 爲 target :
sed -i 's/source/target/g' file.txt

刪除文件中包含 source 的行:
sed -i '/source/d' file.txt

刪除多文件直接目錄就行 ./*
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章