python 文件處理

f = open('chenli.txt')            #打開文件
first_line = f.readline()
print('first line:',first_line)     #讀一行
print('我是分隔線'.center(50,'-'))
data = f.read()    # 讀取剩下的所有內容,文件大時不要用
print(data)         #打印讀取內容f.close()           #關閉文件

?

1 文件句柄 = open('文件路徑', '模式')

?

打開文件時,需要指定文件路徑和以何等方式打開文件,打開后,即可獲取該文件句柄,日后通過此文件句柄對該文件操作。

打開文件的模式有:

  • r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
  • w,只寫模式【不可讀;不存在則創建;存在則清空內容】
  • x, 只寫模式【不可讀;不存在則創建,存在則報錯】
  • a, 追加模式【可讀; ? 不存在則創建;存在則只追加內容】

"+" 表示可以同時讀寫某個文件

  • r+, 讀寫【可讀,可寫】
  • w+,寫讀【可讀,可寫】
  • x+ ,寫讀【可讀,可寫】
  • a+, 寫讀【可讀,可寫】

?"b"表示以字節的方式操作

  • rb ?或 r+b
  • wb 或 w+b
  • xb?或 w+b
  • ab?或 a+b

?注:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼

?

、寫程序
a. 文件操作時 with 的作用?
b. 寫程序:利用 with 實現同時打開兩個文件(一讀,一寫,并將讀取的內容寫入到寫入模式的文件中)
with open("test","r",encoding="utf8") as a,open("test1","w",encoding="utf8") as b:a1 = a.read()b.write(a1)

?

# 字符串----encode----》bytes
# bytes-----decode---》字符串
f1 = open("test","wb")           # b的方式不能指定編碼
f1.write("你好1".encode("utf8"))
f1.close()f2 = open("test","ab")           # b的方式不能指定編碼
f2.write("你好2".encode("utf8"))
f2.close()f = open("test","rb")           # b的方式不能指定編碼
data = f.read()
print(data.decode("utf8"))
f.close()

?

fo = open("test","r+",encoding="utf8")
print(fo.closed)        #如果文件關閉返回True
print(fo.encoding)      #查看使用open打開文件的編碼
fo.flush()              #將文件從內存刷到硬盤上
print(fo.tell())       #查看光標的位置,以字節為單位
fo.seek(15)            #移動光標的位置,以字節為單位
print(fo.tell())
fo.truncate(11)      #保留文件字節的內容,文件要是可寫的方式打開,但w 和 w+ 的方式除外

?

fo = open("test","r+",encoding="utf8")
fo.seek(15,0)     #第二個參數,0代表光標從頭開始算,1代表光標從上一次開始算,2代表光標從最后開始算
fo.seek(15.1)
fo.seek(15.2)

?

練習:

haproxy.conf 文件

globallog 127.0.0.1 local2daemonmaxconn 256log 127.0.0.1 local2 info
defaultslog globalmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msoption  dontlognulllisten stats :8888stats enablestats uri       /adminstats auth      admin:1234frontend oldboy.orgbind 0.0.0.0:80option httplogoption httpcloseoption  forwardforlog globalacl www hdr_reg(host) -i www.oldboy.orguse_backend www.oldboy.org if wwwbackend www.oldboy1.orgserver 1.1.1.1 1.1.1.1 weight 999 maxconn 333server 11.1.1.1 11.1.1.1 weight 9 maxconn 3server 1.1.1.1 1.1.1.1 weight 9 maxconn 3
backend www.oldboy2.orgserver 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
backend www.oldboy20.orgserver 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
backend www.oldboy11.orgserver 2.2.2.2 2.2.2.2 weight 20 maxconn 3000
backend www.oldboy12.orgserver 2.2.2.2 2.2.2.2 weight 20 maxconn 3000

?

#查看
# 發 www.oldboy1.org #修改
# 發 [{'backend':'www.oldboy1.org','record':{'server':'1.1.1.1','weight':9,'maxconn':3}},{'backend':'www.oldboy1.org','record':{'server':'10.10.10.10','weight':99,'maxconn':33}}]#增加  刪除 
# 發 {'backend':'www.oldboy1.org','record':{'server':'1.1.1.1','weight':9,'maxconn':3}}import osdef file_handle(backend_data,res=None, type="fetch"):if type == "fetch":with open("haproxy.conf", "r") as read_f:tag = Falsel = []for r_l in read_f:if r_l.strip() == backend_data:tag = Truecontinueif tag and r_l.startswith("backend"):breakif tag:print("\33[1;45m %s \33[0m" % r_l, end="")l.append(r_l)return lelif type == "apend":with open("haproxy.conf", "r") as read_f, open("haproxy1.conf", "w") as write_f:for r_l in read_f:write_f.write(r_l)for n_l in res:write_f.write(n_l)os.rename("haproxy.conf", "haproxy.conf.bak")os.rename("haproxy1.conf", "haproxy.conf")os.remove("haproxy.conf.bak")elif type == "change":with open("haproxy.conf", "r") as read_f, open("haproxy1.conf", "w") as write_f:tag = Falsehas_write = Falsefor r_l in read_f:if r_l.strip() == backend_data:tag = Truecontinueif tag and r_l.startswith("backend"):tag = Falseif not tag:write_f.write(r_l)else:if not has_write:for n_l in res:write_f.write(n_l)has_write = Trueos.rename("haproxy.conf", "haproxy.conf.bak")os.rename("haproxy1.conf", "haproxy.conf")os.remove("haproxy.conf.bak")def fetch(data):backend_data = "backend %s" %datareturn file_handle(backend_data)def add(data):backend = data["backend"]backend_data = "backend %s" % backendn_r = "%sserver %s %s weight %s maxconn %s\n" % (" " * 8, data["record"]["server"],data["record"]["server"],data["record"]["weight"],data["record"]["maxconn"])res = fetch(backend)if not res:res.append(backend_data)res.append(n_r)file_handle(backend_data,type = "apend")else:res.insert(0,"%s\n"%backend_data)if n_r not in res:res.append(n_r)file_handle(backend_data, res, type="change")def remove(data):backend = data["backend"]backend_data = "backend %s"%backendc_r = "%sserver %s %s weight %s maxconn %s\n"%(" "*8,data["record"]["server"],data["record"]["server"],data["record"]["weight"],data["record"]["maxconn"])res = fetch(backend)if not res or c_r not in res:print("數據不存在")returnelse:res.insert(0,"%s\n"%backend_data)res.remove(c_r)file_handle(backend_data, res, type="change")def change(data):backend = data[0]["backend"]backend_data = "backend %s"%backendold_s_r = "%sserver %s %s weight %s maxconn %s\n"%(" "*8,data[0]["record"]["server"],data[0]["record"]["server"],data[0]["record"]["weight"],data[0]["record"]["maxconn"])new_s_r = "%sserver %s %s weight %s maxconn %s\n" % (" " * 8, data[1]["record"]["server"],data[1]["record"]["server"],data[1]["record"]["weight"],data[1]["record"]["maxconn"])res = fetch(backend)if not res or old_s_r not in res:print("數據不存在")returnelse:index = res.index(old_s_r)res[index] = new_s_rres.insert(0,"%s\n"%backend_data)file_handle(backend_data,res,type="change")if __name__ == "__main__":msg = '''1:查詢2:添加3:刪除4:修改5:退出'''menu_dic = {'1': fetch,'2': add,'3': remove,'4': change,'5': exit,}while True:print(msg)choice = input("請輸入操作:").strip()if not choice or choice not in menu_dic:continueif choice == "5":breakdata = input("請輸入數據:").strip()if choice != '1':data=eval(data)menu_dic[choice](data)

?

轉載于:https://www.cnblogs.com/liaoboshi/p/6136257.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394497.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第五章 MVC之Bundle詳解

一、簡述 Bundle,英文原意就是捆、收集、歸攏。在MVC中的Bundle技術,也就是一個對css和js文件的捆綁壓縮的技術。 它的用處: 將多個請求捆綁為一個請求,減少服務器請求數 壓縮javascript,css等資源文件,減小…

所給服務器端程序改寫為能夠同時響應多個客戶端連接請求的服務器程序_一文讀懂客戶端請求是如何到達服務器的...

點擊上方“藍色字體”,選擇 “設為星標”關鍵訊息,D1時間送達!互聯網是人類歷史上最偉大的發明創造之一,而構成互聯網架構的核心在于TCP/IP協議。那么TCP/IP是如何工作的呢,我們先從數據包開始講起。1、數據包一、HTTP…

消息服務器 推送技術,SSE服務器推送技術

SSE即 server send event 服務器發送事件,在在早期可能會使用ajax向服務器輪詢的方式,使瀏覽器第一時間接受到服務器的消息,但這種頻率不好控制,消耗也比較大。但是對于SSE來說,當客戶端向服務端發送請求,服…

Contest2162 - 2019-3-28 高一noip基礎知識點 測試5 題解版

傳送門 T1 單調棧 按照b排序 在家每一個物品時,判斷一下a和b的關系 如果s[sta[top]].a>s[i].b,就彈棧 記錄所有時候的height,并取最大值 T2 單調棧裸題 單調棧是干什么的?? 單調棧是記錄一個數的一側的第一個比他大…

在package.json里面的script設置環境變量,區分開發及生產環境。注意mac與windows的設置方式不一樣...

在package.json里面的script設置環境變量,區分開發及生產環境。 注意mac與windows的設置方式不一樣。 "scripts": {"publish-mac": "export NODE_ENVprod&&webpack -p --progress --colors","publish-win": "…

leetcode 978. 最長湍流子數組(動態規劃)

978. 最長湍流子數組 當 A 的子數組 A[i], A[i1], …, A[j] 滿足下列條件時&#xff0c;我們稱其為湍流子數組&#xff1a; 若 i < k < j&#xff0c;當 k 為奇數時&#xff0c; A[k] > A[k1]&#xff0c;且當 k 為偶數時&#xff0c;A[k] < A[k1]&#xff1b; 或 …

人工智能取代工作_人工智能正在取代人們的工作-開發人員是下一個嗎?

人工智能取代工作I was recently asked to comment on whether there was any point in becoming a developer right now, because AI might be doing your job very soon.最近有人要求我評論一下現在成為開發人員是否有任何意義&#xff0c;因為AI可能很快就會完成您的工作。 …

python類self_Python類中的self到底是干啥的

Python編寫類的時候&#xff0c;每個函數參數第一個參數都是self&#xff0c;一開始我不管它到底是干嘛的&#xff0c;只知道必須要寫上。后來對Python漸漸熟悉了一點&#xff0c;再回頭看self的概念&#xff0c;似乎有點弄明白了。首先明確的是self只有在類的方法中才會有&…

PHP中關于取模運算及符號

執行程序段<?php echo 8%(-2) ?>&#xff0c;輸出結果是&#xff1a; %為取模運算&#xff0c;以上程序將輸出0 $a%$b,其結果的正負取決于$a的符號。 echo ((-8)%3); //將輸出-2 echo (8%(-3)); //將輸出2轉載于:https://www.cnblogs.com/457248499-qq-com/p…

[pytorch] Pytorch入門

Pytorch入門 簡單容易上手&#xff0c;感覺比keras好理解多了&#xff0c;和mxnet很像&#xff08;似乎mxnet有點借鑒pytorch&#xff09;&#xff0c;記一記。 直接從例子開始學&#xff0c;基礎知識咱已經看了很多論文了。。。 import torch import torch.nn as nn import to…

無線服務器密碼讓別人改了,wifi密碼被改了怎么辦_wifi密碼被別人改了怎么辦?-192路由網...

wifi密碼被別人改了怎么辦&#xff1f;wifi密碼之所以被別人修改&#xff0c;是因為其他人知道了你路由器的登錄密碼。所以&#xff0c;如果發現自己wifi密碼被別人修改了&#xff0c;應該立刻登錄到路由器設置界面&#xff0c;修改路由器登錄密碼、修改wifi密碼、并調整wifi加…

[archlinux][hardware] 查看SSD的使用壽命

因為最近把16GB的SSD做成了HDD的cache&#xff0c;所以比較關系壽命問題。 使用smartctl工具。 參考&#xff1a;https://www.v2ex.com/t/261373 linux 下面只有 smartmontools 這一個工具&#xff0c;而且只對像三喪和 intel 這樣的大廠支持良好&#xff0c;其余的廠家文檔不全…

leetcode174. 地下城游戲(動態規劃)

一些惡魔抓住了公主&#xff08;P&#xff09;并將她關在了地下城的右下角。地下城是由 M x N 個房間組成的二維網格。我們英勇的騎士&#xff08;K&#xff09;最初被安置在左上角的房間里&#xff0c;他必須穿過地下城并通過對抗惡魔來拯救公主。 騎士的初始健康點數為一個正…

如何設置Windows版Go —快速簡便的指南

by Linda Gregier琳達格雷格(Linda Gregier) Another great language to add to your full-stack developer tool belt is the simple and productive general-purpose programming language of Go.添加到您的全棧開發人員工具帶中的另一種很棒的語言是Go的簡單而高效的通用編…

python計算現場得分_淺談用 Python 計算文本 BLEU 分數

淺談用 Python 計算文本 BLEU 分數BLEU, 全稱為 Bilingual Evaluation Understudy(雙語評估替換), 是一個比較候選文本翻譯與其他一個或多個參考翻譯的評價分數盡管 BLEU 一開始是為翻譯工作而開發, 但它也可以被用于評估文本的質量, 這種文本是為一套自然語言處理任務而生成的…

Unity的幾個特殊文件夾

1.以.開頭的文件夾會被unity忽略&#xff0c;資源不會被導入&#xff0c;腳本不會編譯。 2.Standard Assets和Pro Standard Assets&#xff1a;在這個文件夾中的腳本最先被編譯。 3.Editor&#xff1a;以Editor命名的文件夾允許其中的腳本訪問Unity Editor的API。如果腳本中使用…

怎么上傳文件到kk服務器,VS Code 關于SFTP上傳文件到多服務器的配置

工欲善其事&#xff0c;必先利其器&#xff01;剛學前端的時候一直用的DW來編寫代碼&#xff0c;其功能非常強大&#xff0c;但在Linux下不能用&#xff0c;所以就轉VS Code了。但是剛開始使用VS Code的時候&#xff0c;很多DW上的功能需要自己安裝擴展&#xff0c;并配置才可以…

CentOS7 Firewall NAT 及端口映射

本節介紹用CentOS7的Firewalll來做NAT以及端口映射實驗拓撲:因為我的環境里CentOS7上有KVM虛擬機需要共享網卡上網&#xff0c;所以我把網卡都添加到了橋里面&#xff0c;當然這里也可以不用橋&#xff0c;直接用物理網口&#xff1b;用nmcli創建橋&#xff0c;并添加網口到橋&…

JVM源碼---教你傻瓜式編譯openjdk7(JAVA虛擬機愛好者必看)

LZ經過一個星期斷斷續續的研究&#xff0c;終于成功的搞定了JDK的成功編譯與調試。盡管網絡上的教程也有不少&#xff0c;包括源碼中也有自帶的編譯步驟說明&#xff0c;但真正自己動手的話&#xff0c;還是會遇到不少意料之外的錯誤。 為了方便各位猿友編譯&#xff0c;LZ臨時…

leetcode1105. 填充書架(動態規劃)

附近的家居城促銷&#xff0c;你買回了一直心儀的可調節書架&#xff0c;打算把自己的書都整理到新的書架上。 你把要擺放的書 books 都整理好&#xff0c;疊成一摞&#xff1a;從上往下&#xff0c;第 i 本書的厚度為 books[i][0]&#xff0c;高度為 books[i][1]。 按順序 將…