最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python提高運維效率的腳本分享

 更新時間:2023年05月10日 08:27:43   作者:咸魚Linux運維  
這篇文章主要來和大家分享一個Python提高運維效率的腳本,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以參考下

哈嘍大家好我是咸魚,今天給大家分享一個能夠提升運維效率的 python 腳本

咸魚平常在工作當中通常會接觸到下面類似的場景:

  • 容災切換的時候批量對機器上的配置文件內容進行修改替換
  • 對機器批量替換某個文件中的字段

對于 Linux 機器,咸魚可以寫個 shell 腳本或者直接批量使用 sed 命令就能很好的解決

但對于 Windows 機器,上面的方法就不管用了,我們就需要想其他的辦法

這里咸魚給大家分享一個由 python 編寫的腳本,這個腳本能夠去替換指定文本文件中的指定內容,而且還能一次替換多個內容

我們先看效果,目標文件:name.txt

1.修改一個內容

python sed.py c:\name.txt Kanye Edison 

2.修改多個內容

python sed.py c:\name.txt Kanye,male  Edison,female 

源碼在文末哦

首先我們導入模塊

import sys
import os
import time
from shutil import copy

然后我們來看一下腳本中的第一個函數——data_preprocess()

def data_preprocess():
    file_name, old_str, new_str = sys.argv[1:4] #接收輸入的參數:目標文件名,舊內容、新內容、字符編碼
    try: # 傳入字符編碼參數
        encoding = sys.argv[4] 
    except IndexError: # 沒有傳入字符編碼參數的話就默認使用 'utf-8' 字符編碼
        encoding = 'utf-8' 

    old_str_list = [i.encode(encoding) for i in old_str.split(',')] # 將舊內容轉換成列表形式
    new_str_list = [i.encode(encoding) for i in new_str.split(',')] # 將新內容轉換成列表形式

    assert len(old_str_list) == len(new_str_list) # 判斷用戶輸入的 old_str 和 new_str 是不是一一對應
    trans_tabs = list(zip(old_str_list, new_str_list)) # 將要舊內容列表(old_str_list)和新內容列表( new_str_list)中的元素一一對應

    return file_name, trans_tabs # 返回目標文件名,以及一個舊內容元素和新內容元素一一對應的列表

這個函數實現的功能是接收輸入的參數(目標文件名、要替換的內容,替換的內容、字符編碼格式),然后將要替換的內容與替換的內容分別轉換成列表形式

注意:替換多個內容時在多個內容之間用逗號隔開

例如我們敲如下命令替換一個內容:

python sed.py c:\test.txt Edison Kanye

這個函數就會返回下面內容(由于命令里沒有傳入字符編碼參數,采取默認的 UTF-8)

file_name = c:\test.txt
trans_tabs = [(Edsion, Kanye)]

如果我們需要替換多個內容(例如將首字母改成大寫)

python sed.py c:\test.txt edsion,kanye,fish Edsion,Kanye,Fish utf-8

這個函數就會返回下面內容(命令傳入了字符編碼參數)

file_name = c:\test.txt
trans_tabs = [(edsion, Edsion), (kanye,Kanye), (fish,Fish)]

接下來我們來看第二個函數——backup()

def backup(file_name):
    time_mark = time.strftime('%Y%m%d_%H%M%S') #時間戳
    bak_dir = r'C:\Users\Administrator\Desktop' #備份路徑
    basename = os.path.basename(file_name)
    os.makedirs(bak_dir) if not os.path.isdir(bak_dir) else True
    copy(file_name, os.path.join(bak_dir, basename + '_' + time_mark))
    print("備份 %s 成功" %file_name)

這個函數的功能就是在修改文件之前先把文件備份,防止后期我們需要回滾復原

最后我們來看最后一個函數—— sed()

這個函數便是整個腳本的核心,它負責去執(zhí)行修改替換文件內容的操作

def sed(file_name, trans_tabs):
    with open(file_name + '.swap', 'wb') as swap_fs, open(file_name, 'rb') as file_names: #打開一個臨時文件和目標文件
        for line in file_names: # 逐行讀取
            for tab in trans_tabs:
                line = line.replace(tab[0], tab[1]) if tab[0] in line else line # 修改替換操作
            swap_fs.write(line) # 將修改后的內容寫入到臨時文件當中
    os.remove(file_name) # 刪除舊目標文件
    os.rename(file_name + '.swap', file_name) # 將臨時文件重命名,就變成了新的目標文件

首先先打開一個臨時文件(file_name.swap)和目標文件(file_name)

然后對目標文件(file_name)進行逐行讀取到內存上,再去對內容進行修改,最后將修改后的內容寫入到這個臨時文件(file_name.swap)中

修改完畢之后,把臨時文件重命名一下、把舊目標文件刪掉,這個臨時文件就變成了修改內容后的目標文件了

import sys
import os
import time
from shutil import copy


def data_preprocess():
    file_name, old_str, new_str = sys.argv[1:4]
    try:
        encoding = sys.argv[4]
    except IndexError:
        encoding = 'utf-8'

    old_str_list = [i.encode(encoding) for i in old_str.split(',')]
    new_str_list = [i.encode(encoding) for i in new_str.split(',')]

    assert len(old_str_list) == len(new_str_list)
    trans_tabs = list(zip(old_str_list, new_str_list))

    return file_name, trans_tabs


def backup(file_name):
    time_mark = time.strftime('%Y%m%d_%H%M%S')
    bak_dir = r'C:\Users\Administrator\Desktop'
    basename = os.path.basename(file_name)
    os.makedirs(bak_dir) if not os.path.isdir(bak_dir) else True
    copy(file_name, os.path.join(bak_dir, basename + '_' + time_mark))
    print("備份 %s" %file_name)


def sed(file_name, trans_tabs):
    with open(file_name + '.swap', 'wb') as swap_fs, open(file_name, 'rb') as file_names:
        for line in file_names:
            for tab in trans_tabs:
                line = line.replace(tab[0], tab[1]) if tab[0] in line else line
            swap_fs.write(line)
    os.remove(file_name)
    os.rename(file_name + '.swap', file_name)


file_name, trans_tabs = data_preprocess()
backup(file_name)
sed(file_name, trans_tabs)

 到此這篇關于Python提高運維效率的腳本分享的文章就介紹到這了,更多相關Python腳本內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python logging模塊學習筆記

    Python logging模塊學習筆記

    這篇文章主要介紹了Python logging模塊,logging模塊是在2.3新引進的功能,用來處理程序運行中的日志管理,本文詳細講解了該模塊的一些常用的類和模塊級函數,需要的朋友可以參考下
    2014-05-05
  • 升級keras解決load_weights()中的未定義skip_mismatch關鍵字問題

    升級keras解決load_weights()中的未定義skip_mismatch關鍵字問題

    這篇文章主要介紹了升級keras解決load_weights()中的未定義skip_mismatch關鍵字問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python使用電子郵件模塊smtplib的方法

    python使用電子郵件模塊smtplib的方法

    這篇文章主要介紹了python使用電子郵件模塊smtplib的方法,需要的朋友可以參考下
    2016-08-08
  • python實現視頻分幀效果

    python實現視頻分幀效果

    這篇文章主要為大家詳細介紹了python實現視頻分幀效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Linux下使用python腳本執(zhí)行BCP導入導出方式

    Linux下使用python腳本執(zhí)行BCP導入導出方式

    這篇文章主要介紹了Linux下使用python腳本執(zhí)行BCP導入導出方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • pyspark?dataframe列的合并與拆分實例

    pyspark?dataframe列的合并與拆分實例

    這篇文章主要介紹了pyspark?dataframe列的合并與拆分實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python基于scapy實現修改IP發(fā)送請求的方法示例

    Python基于scapy實現修改IP發(fā)送請求的方法示例

    這篇文章主要介紹了Python基于scapy實現修改IP發(fā)送請求的方法,涉及Python網絡編程中使用scapy操作IP的相關實現技巧,需要的朋友可以參考下
    2017-07-07
  • python機器學習pytorch?張量基礎教程

    python機器學習pytorch?張量基礎教程

    這篇文章主要為大家介紹了python機器學習pytorch?張量基礎教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • python中函數傳參的多種方式

    python中函數傳參的多種方式

    本文主要介紹了Python中函數傳參的幾種方式,包括位置參數、關鍵字參數、缺省參數和不定長參數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • 對Pytorch 中的contiguous理解說明

    對Pytorch 中的contiguous理解說明

    這篇文章主要介紹了對Pytorch 中的contiguous理解說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

新巴尔虎左旗| 中宁县| 绍兴市| 孙吴县| 甘德县| 永济市| 长垣县| 武宣县| 镇坪县| 承德县| 新兴县| 金平| 崇文区| 诸暨市| 玛多县| 平顶山市| 九寨沟县| 永寿县| 卓尼县| 普安县| 望谟县| 白城市| 芜湖市| 普陀区| 阿克苏市| 吐鲁番市| 泗阳县| 武强县| 富顺县| 凤阳县| 饶阳县| 海南省| 民乐县| 炉霍县| 南昌县| 基隆市| 保德县| 溆浦县| 海安县| 田林县| 于田县|