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)

 

  

  

  

 

posted @ 2017-05-10 23:25  小聪傻大  阅读(2743)  评论(0编辑  收藏  举报