亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python提高運(yùn)維效率的腳本分享

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

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

咸魚平常在工作當(dāng)中通常會(huì)接觸到下面類似的場景:

  • 容災(zāi)切換的時(shí)候批量對機(jī)器上的配置文件內(nèi)容進(jìn)行修改替換
  • 對機(jī)器批量替換某個(gè)文件中的字段

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

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

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

我們先看效果,目標(biāo)文件:name.txt

1.修改一個(gè)內(nèi)容

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

2.修改多個(gè)內(nèi)容

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

源碼在文末哦

首先我們導(dǎo)入模塊

import sys
import os
import time
from shutil import copy

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

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

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

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

    return file_name, trans_tabs # 返回目標(biāo)文件名,以及一個(gè)舊內(nèi)容元素和新內(nèi)容元素一一對應(yīng)的列表

這個(gè)函數(shù)實(shí)現(xiàn)的功能是接收輸入的參數(shù)(目標(biāo)文件名、要替換的內(nèi)容,替換的內(nèi)容、字符編碼格式),然后將要替換的內(nèi)容與替換的內(nèi)容分別轉(zhuǎn)換成列表形式

注意:替換多個(gè)內(nèi)容時(shí)在多個(gè)內(nèi)容之間用逗號隔開

例如我們敲如下命令替換一個(gè)內(nèi)容:

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

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

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

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

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

這個(gè)函數(shù)就會(huì)返回下面內(nèi)容(命令傳入了字符編碼參數(shù))

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

接下來我們來看第二個(gè)函數(shù)——backup()

def backup(file_name):
    time_mark = time.strftime('%Y%m%d_%H%M%S') #時(shí)間戳
    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)

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

最后我們來看最后一個(gè)函數(shù)—— sed()

這個(gè)函數(shù)便是整個(gè)腳本的核心,它負(fù)責(zé)去執(zhí)行修改替換文件內(nèi)容的操作

def sed(file_name, trans_tabs):
    with open(file_name + '.swap', 'wb') as swap_fs, open(file_name, 'rb') as file_names: #打開一個(gè)臨時(shí)文件和目標(biāo)文件
        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) # 將修改后的內(nèi)容寫入到臨時(shí)文件當(dāng)中
    os.remove(file_name) # 刪除舊目標(biāo)文件
    os.rename(file_name + '.swap', file_name) # 將臨時(shí)文件重命名,就變成了新的目標(biāo)文件

首先先打開一個(gè)臨時(shí)文件(file_name.swap)和目標(biāo)文件(file_name)

然后對目標(biāo)文件(file_name)進(jìn)行逐行讀取到內(nèi)存上,再去對內(nèi)容進(jìn)行修改,最后將修改后的內(nèi)容寫入到這個(gè)臨時(shí)文件(file_name.swap)中

修改完畢之后,把臨時(shí)文件重命名一下、把舊目標(biāo)文件刪掉,這個(gè)臨時(shí)文件就變成了修改內(nèi)容后的目標(biāo)文件了

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)

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

相關(guān)文章

  • 使用tensorflow保存和恢復(fù)模型saver.restore

    使用tensorflow保存和恢復(fù)模型saver.restore

    這篇文章主要介紹了使用tensorflow保存和恢復(fù)模型saver.restore方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 詳解Python中的文件操作

    詳解Python中的文件操作

    在日常生活中,文件操作主要包括打開、關(guān)閉、讀、寫等操作,這篇文章主要為大家詳細(xì)介紹了Python中這些文件操作的實(shí)現(xiàn),需要的可以了解下
    2023-07-07
  • python 內(nèi)置函數(shù)匯總詳解

    python 內(nèi)置函數(shù)匯總詳解

    這篇文章主要介紹了python 內(nèi)置函數(shù)匯總詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python selenium自動(dòng)化測試模型圖解

    Python selenium自動(dòng)化測試模型圖解

    這篇文章主要介紹了Python selenium自動(dòng)化測試模型圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 解決django服務(wù)器重啟端口被占用的問題

    解決django服務(wù)器重啟端口被占用的問題

    今天小編就為大家分享一篇解決django服務(wù)器重啟端口被占用的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)的解決方法詳解

    Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)的解決方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)‘gbk‘?codec?can‘t?decode的兩種解決辦法,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Python輕松破解加密壓縮包教程詳解

    Python輕松破解加密壓縮包教程詳解

    相信大家都遇到過這種情況,下載文件的時(shí)候遇到壓縮包又沒有密碼,或者說自己設(shè)置的加密密碼,但是忘記了,就很難受。下面就將為大家介紹如何解決這一問題
    2021-12-12
  • Python?加載?TensorFlow?模型的注意事項(xiàng)

    Python?加載?TensorFlow?模型的注意事項(xiàng)

    TensorFlow支持多種模型格式,但最常見的兩種是SavedModel和HDF5(對于Keras模型),這里,我將分別給出加載這兩種模型格式的示例代碼,需要的朋友可以參考下
    2024-08-08
  • 利用PyTorch實(shí)現(xiàn)VGG16教程

    利用PyTorch實(shí)現(xiàn)VGG16教程

    這篇文章主要介紹了利用PyTorch實(shí)現(xiàn)VGG16教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的?

    PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的?

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評論