mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

05_Other-使用 Python open 函數批量替換文件內容

2023/02/06 更新#

VSCode 集成了 某路徑下的文件批量替換指定內容 的功能,更方便

image-20230206183933193

1. 前言#

jsd 失效之後,博主使用了新的圖床方案,需將文章的原 jsd 圖片連結替換為新的圖片地址

這類腳本在網上有很多,都很推薦,如

2. 腳本內容#

源碼來自:批量修改文件內容(Python 版)

腳本採用遞歸的方式,遍歷 43~46 行 目錄下的所有文件,進行批量替換

說明:

  1. 根據自身情況修改 43~46 行 需遍歷的目錄;修改 47、48 行 需要替換的內容
  2. 腳本第 24 行 限制了只篩選出 Markdown 類型的文本文件進行修改,如需修改其他類型的文本文件 需自行更改後綴進行匹配
  3. 執行前請先備份源文件,以防出錯後無法還原
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 源碼參考  https://blog.csdn.net/qq_38150250/article/details/118026219

import os
import re

# 文件查找 find . -name file_name -type f
# 查找函數:search_path 查找根路徑 

# 獲取文章路徑
def search(search_path, search_result):
    # 獲取當前路徑下地所有文件
    all_file = os.listdir(search_path)
    # 對於每一個文件
    for each_file in all_file:
        # 若文件為一個文件夾
        if os.path.isdir(search_path + each_file):
            # 遞歸查找
            search(search_path + each_file + '/', search_result)
        # 如果是需要被查找的文件
        else:
            if re.findall('.*\.md$', each_file) == [each_file]:
            # 輸出路徑
                search_result.append(search_path + each_file)


# 替換 sed -i 's/old_str/new_str/'
# 文本替換 replace_file_name 需要替換的文件路徑,replace_old_str 要替換的字符,replace_new_str 替換的字符
def replace(replace_file_name, replace_old_str, replace_new_str):
    with open(replace_file_name, "r", encoding = "UTF-8") as f1: 
        content = f1.read()
        f1.close()
        t = content.replace(replace_old_str, replace_new_str)
    with open(replace_file_name, "w", encoding = "UTF-8") as f2:
        f2.write(t)
    f2.close()


# 需要改的地方
#path = 'E:/code_zone/.history/20220831_blog/source/_posts/'
path_list = [
    'E:/code_zone/hexo-source/source/_posts/',
    'E:/code_zone/hexo-source-butterfly/source/_posts/',
]
old_str = 'https://image.cpen.top/image/'
new_str = 'https://image.cpen.top/image/'

search_result = []

if __name__ == '__main__':
    result = []                 # 存放文件路徑
    # 默認當前目錄
    # path = os.getcwd()
    for path in path_list:
        search(path, result)    # 獲取文章路徑
    count = 0
    for file_name in result:
        replace(file_name, old_str, new_str)
        count += 1
        print("{} done  {}".format(file_name, count))

# 命令
# python E:/code_zone/tools/python-replace/replace.py

3. 參考文章#

源碼來自:批量修改文件內容(Python 版)

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。