Python之路-文件操作(py3)


文件操作的基本步驟:

  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
View Code

  對文件進行讀操作,輸入域名,查詢域名下的對應配置內容

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)

 

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM