def file_handle(backend_data,res = none,type = 'fetch'):
if type == '
fetch':
ret =
with open(
'haproxy
','r
') as
read_f :
tag =false
for read_line in
read_f:
if read_line.strip() ==backend_data:
tag =true
continue
if tag and read_line.startswith('
backend'):
break
#server讀完,讀到下乙個backend時,關閉for迴圈,否則就會將 backend www.oldboy1.org後面的內容全部讀出來
iftag :
print(
'\033[1;45m%s\033[0m
'%read_line,end = ''
) #把讀到的哪一行server列印出來
return
ret #函式返回該列表,及返回查詢結果
elif type == '
change':
import os
with open (
'haproxy
','r
') as read_f, open('
haproxy_new
','w
') as
write_f:
tag =false
for read_line in
read_f:
if read_line.strip() ==backend_data:
tag =true
continue
if tag and read_line.startswith('
backend'):
tag =false #如果此處不對tag進行關閉,那麼在新檔案中寫完backend www.oldboy1.org內的server就會停止
ifnot tag:
write_f.write(read_line)
else
:
ifnot has_write:
for record in
res: #把新紀錄寫在新檔案中
write_f.write(record)
has_write =true
os.rename(
'haproxy
','haproxy.bak
') #此三步操作是使新檔案覆蓋老檔案,先將老檔案換名,再將新檔案換成老檔案原來的名,在刪除老檔案
os.rename(
'haproxy_new
','haproxy')
os.remove(
'haproxy.bak')
def fetch(data):
print(
'\033[1;43m這是查詢功能\033[0m')
print(
'\033[1;43m使用者資料是\033[0m
',data)
backend_data = '
backend %s
' %data
return
file_handle(backend_data)
def add():
pass
def change(data):
print(
'這是修改功能')
print(
'使用者輸入的資料是
',data)
backend = data[0]['
backend
'] #檔案當中的一條記錄 如 www.oldboy1.org
backend_data = '
backend %s
' %backend
old_server_record = '
%sserver %s weight %s maxconn %s\n
' % ('
'*8,data[0]['
record
']['
server
'],data[0]['
record
']['
weight
'],data[0]['
record
']['
maxconn
']) #因為傳進來的引數是列表(內包含兩個字典),通過此語句將要修改的資料拼接成完整的字串
new_server_record = '
%sserver %s weight %s maxconn %s\n
' % ('
'*8,data[1]['
record
']['
server
'],data[1]['
record
']['
weight
'],data[1]['
record
']['
maxconn'])
print(
'使用者想要修改的記錄是
',old_server_record)
res =fetch(backend) #獲取backend 後的server內容
if not res or old_server_record not in
res:
return
'你要修改的記錄不存在
'else
: index =res.index(old_server_record)
res[index] =new_server_record #先在列表中完成新老記錄的修改,此處用新記錄代替老記錄
res.insert(
0,'%s\n
file_handle(backend_data,res = res,type = '
change')
def delete():
pass
if __name__ == '
__main__':
msg = '''
1:查詢,
2:新增,
3:修改,
4:刪除,
5:退出,
'''msg_dic =
while
true:
print(msg)
choice = input('
請輸入你的選項:
').strip()
if not choice : continue
if choice == '
5': break
data = input('
請輸入你的資料:
').strip()
if choice != '1'
: data =eval(data)
res =msg_dic[choice](data)
print(
'最終的結果是
',res)
# 修改資訊:[},}]
總結:(1)練習函式的程式設計
(2)檔案的處理
(3)解耦:把查詢功能和修改功能的部分**移動到file_handle() 函式中,這就可以看作是程式的解耦
(4)tag的用法:程式中tag和has_write的用法,使函式在適當的時候停止,注意看在函式中 tag 的用法
python 檔案內容修改替換操作
當我們讀取檔案中內容後,如果想要修改檔案中的某一行或者某乙個位置的內容,在python中是沒有辦法直接實現的,如果想要實現這樣的操作只能先把檔案所有的內容全部讀取出來,然後進行匹配修改後寫入到新的檔案中。例項 如下所示 開啟舊檔案 f open file text.txt r encoding ut...
python檔案操作 檔案指標移動 修改
本文目錄 一 檔案指標移動 二 修改 大前提 檔案內指標的移動是bytes為單位的,唯獨t模式下的read讀取內容個數是以字元為單位 f.read 3 with open a.txt mode rt encoding utf 8 as f data f.read 3 print data with ...
Python之檔案操作例項 批量修改檔案的字首名
匯入包,很重要的 import os 建立資料夾及檔案 os.mkdir test for i in range 1,6 os.mkdir test test str i fp open test test str i txt w encoding utf 8 while true print 功能...