文件操作的基本步驟:
1.打開文件:f=open('filename'),with open('filename') as f
2.操作文件:增,刪,改,查
3.關閉文件:f.close
打開文件
python中打開文件的函數為open('filename',mode='r',encode='None'),open函數默認返回文件的句柄,我們可以根據句柄來對文件進行增,刪,改,查的操作。將句柄賦給我們定義的變量,假設我們定義變量為f,則f=open('filename',mode='r',encode='utf-8') 或者with open('filename') as f。
注意點:
1.python解釋器打開文件時,是對硬盤進行操作,需要內核態才可以操作硬盤,故此時python解釋器是調用操作系統的文件讀取接口。windows中文版本默認使用GBK編碼表,linux默認使用utf-8,所有如果操作的文件在windows下,非GBK編碼的,需要在open函數中聲明編碼類型,使操作系統運用相應的編碼規則進行解碼讀取,防止串碼,亂碼現象。
2.open主要有三種模式,讀(r),寫(w),追加(a),其中,默認為讀模式。各個模式的詳解,見下文。
關閉文件
關閉文件有兩組方式:1.使用f.close() ,f為open返回的句柄賦值的變量名。 2.程序結束后,自動關閉。第二個方法容易造成文件寫操作時,數據的丟失。原因是寫數據時,數據會先保存在內存中,文件關閉時才會寫入硬盤,此時如果文件未關閉,軟件因為異常崩潰,導致內存中的數據丟失,且未寫入硬盤中。作為第二種關閉方法的優化,是使用:with open('filename') as f 。with會創建一個程序塊,將文件操作置於with程序塊下,這樣with控制塊結束,文件也會自動關閉。
文件操作
查(文件已讀模式打開,或者w+,a+模式):
f.read():讀取文件內容,默認為讀取全部(返回字符串類型),可在括號內指定讀取的字節(py2)或字符數(py3)。在windows下,讀取非GBK格式文件,需要加編碼參數encoding。
f.readline():一行一行的讀取文件內容。
f.readlines():讀取文件的全部內容,以列表的形式返回。一行為列表中的一個元素。
f:以迭代的方式讀取文件,優化了內存使用。
f.seek():移動光標位置,f.seek(offset[, whence]),whence:可選,默認值為 0。給offset參數一個定義,表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起。whence為1或者2時,文件需要以bytes的方式打開,且定義的位移單位為字節。
f.tell():返回當前光標所在的位置
增:
f.write():寫數據進文件
f.flush():將內存中的數據刷新到硬盤上
改,刪:
由於文件在磁盤中的存儲都是固定的扇區,如果要對文件進行更改,只能再新建一個文件,進行修改和刪除的操作。
文件打開模式
r+,w+,a+模式:
r為只讀模式,以該模式打開文件,則只能進行讀操作,不能寫。r+則是讀寫模式,先讀取文件內容,后寫入新的內容,所以使用該模式修改文件,則修改的內容會添加到文件的末尾。
w為寫模式,w會覆蓋掉原先的文本內容,重新寫入數據。w+為寫讀模式,先寫后讀。所以需要先寫數據后,利用seek移動光標位置再讀取數據 。w+的特性也導致了文件內容會被覆蓋。
a為追加寫模式,會將內容追加到文件模式。a+是先追加后讀,所以加的內容會在文件末尾,讀取文件時也需要用seek來移動光標位置再讀取。
示例:
下面會文件內容

global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 stats enable stats uri /admin stats auth admin:1234 frontend oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor log global acl www hdr_reg(host) -i www.oldboy.org use_backend www.oldboy.org if www backend www.oldboy.org server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 backend www.oldboy2.org server 100.1.7.10 100.1.7.9 weight 20 maxconn 3000 server 100.1.7.11 100.1.7.9 weight 20 maxconn 300 server 100.1.7.12 100.1.7.9 weight 20 maxconn 300 backend www.oldboy3.org server 100.1.3.9 100.1.7.9 weight 20 maxconn 3000 server 100.1.3.10 100.1.7.9 weight 20 maxconn 300
對文件進行讀操作,輸入域名,查詢域名下的對應配置內容
flag=False contain_list=[] domain=input("請輸入域名:").strip() with open('haproxy.conf') as f: for line in f: if line.startswith('backend') and line.count(domain): flag=True continue elif line.startswith('backend') and flag: flag=False elif flag: contain_list.append(line.strip()) for i in contain_list: print(i)