zoukankan      html  css  js  c++  java
  • Python第二十一天 fileinput模块

    Python第二十一天    fileinput模块


    fileinput模块

    fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])

    files:                  #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
    inplace:                #是否将标准输出的结果写回文件,默认不取代,只能替换文件内容,不能增加内容
    backup:                 #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
    bufsize:                #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
    mode:                   #读写模式,默认为只读
    openhook:               #该钩子用于控制打开的所有文件,比如说编码方式等;


    fileinput模块提供处理一个或多个文本文件的功能,可以通过使用for循环来读取一个或多个文本文件的所有行。
    它的工作方式和readlines很类似,不同点在于它不是将全部的行读到列表中而是创建了一个xreadlines对象。

    关键在这句话:标准输出会被重定向到打开文件
    所以一定要用print打印到标准输出,fileinput会自动把标准输出内容回写到文件,如果没有用print打印到标准输出,那么就会把空内容回写到文件,也就是清除了文件所有内容
    print re_basedir.sub('basedir=/usr/local/mysql', line) ,


    下面是fileinput模块中的常用函数:
    input() #返回能够用于for循环遍历的对象
    filename() #返回当前文件的名称
    fileno() #返回当前文件的文件描述符
    lineno() #返回当前已经读取的行的数量(或者序号)
    filelineno() #返回当前读取的行的行号
    isfirstline() #检查当前行是否是文件的第一行
    isstdin() #是不是从标准输入读取内容





    #如果要修改多个地方,将sub()得到的结果代入第二个sub()函数再print出来

    利用fileinput实现文件内容替换,并将原文件作备份

    def modify_startupscript(port):
        for line in fileinput.input(MYSQL_STARTUP_SCRIPT,inplace=1,backup='.bak'):
            re_datadir = re.compile(r'datadir=', re.I | re.M)
            content= re_datadir.sub('datadir=/data/mysql/mysql%s/data' %port, line)
            re_basedir = re.compile(r'basedir=', re.I | re.M)
            print re_basedir.sub('basedir=/usr/local/mysql', content) ,
        fileinput.close()


       

    单个文件内容替换

    #!/usr/bin/env python
    import fileinput
    for line in fileinput.input('test.txt',backup='.bak',inplace=1):  
        print line.replace('Python','LinuxEye'),
    fileinput.close()


        
        

    判断是否是第一行

    import fileinput
    for line in fileinput.input('test.txt'):
        if fileinput.isfirstline():
            print line,
        else:
            break
    fileinput.close()
            


      

    读取多个文件

    import fileinput
    from glob import glob
    for line in fileinput.input(glob(r'd:/*.txt')):
        print fileinput.lineno(), u'文件:', fileinput.filename(), /
                u'行号:', fileinput.filelineno(), u'长度:', len(line.strip('/n'))
    fileinput.close()

    从标准输入读入内容

    import fileinput
    
    for line in fileinput.input():
        print fileinput.lineno(), u'文件:', fileinput.filename(), /
                u'行号:', fileinput.filelineno(), u'长度:', len(line.strip('/n'))
    fileinput.close()
    
    cat /etc/passwd |python  readfromfileinput.py
    或
    python  readfromfileinput.py  < /etc/passwd 


        
        
    增加两行内容,实际还是替换

        with  codecs.open(cnf) as fd:
            fdlist = [i for i in fd if i]
            fdstr = ''.join(fdlist)
            restr = re.compile(r'wwwdir')
            result  = restr.findall(fdstr)
    
        if not result:
            for line in fileinput.input(cnf, inplace=1, backup='.bak'):
                print line.replace("alias mv='mv -i'",
                                   "alias mv='mv -i'" + '
    
    ' + "alias wwwdir='cd /usr/local/apache/htdocs'"),
            fileinput.close()


        
       

  • 相关阅读:
    【原创】C#零基础学习笔记010-数据流技术
    【原创】C#零基础学习笔记009-异常处理
    【原创】C#零基础学习笔记008-C#集合处理
    【原创】C#零基础学习笔记007-面向对象的特性
    【原创】C#零基础学习笔记006-面向对象编程基础
    【原创】C#零基础学习笔记005-字符串和日期
    【原创】C#零基础学习笔记004-数组
    session
    最简朴的 session 来实现 登录验证
    cookies session 代码例子
  • 原文地址:https://www.cnblogs.com/lyhabc/p/7553219.html
Copyright © 2011-2022 走看看