zoukankan      html  css  js  c++  java
  • python基础课程_学习笔记15:标准库:有些收藏夹——fileinput

    标准库:有些收藏夹

    fileinput

    重要功能

    性能

    叙述性说明

    input([files[,inplace[,backup]])

    便于遍历多个输入流中的行

    filename()

    返回当前文件的名称

    lineno()

    返回当前(累计)的名称

    filelineno()

    返回当前文件的行数

    isfirstline()

    检查当前行是否是文件的第一行

    isstdin()

    检查最后一行是否来自sys.stdin

    nextfile()

    关闭当前文件,移动到下一个文件

    close()

    关闭序列

    fileinput.input是当中最重要的函数。它会返回可以用于for循环遍历的对象。假设不想使用默认行为(fileinput查找须要循环变量的文件)。那么可以给函数提供(序列形式的)一个或多个文件名称。还能inplace參数设置为真值(inplace=True)以进行原地处理。对于要訪问的每一行,须要打印出替代的内容,以返回到当前的输入文件里。

    在进行原地处理的时候。可选的backup參数将文件名称扩展备份到通过原始文件创建的备份文件里。

    fileinput.filename函数返回当前正在处理的文件名称。

    fileinput.lineno返回当前行的行数。

    这个数值是累计的,所以在完毕一个文件的处理而且開始处理下一个文件的时候,行数并不会重置。而是将上一个文件的最后行数加1作为计数的起始。

    fileinput.filelineno返回当前处理文件的当前行数。每次处理完一个文件而且開始处理下一个文件时,行数都会重置为1。然后又一次開始计数。

    fileinput.isfirstline函数在当前行是当前文件的第一行时返回真值,反之返回假值。

    fileinput.isstdin函数在当前文件为sys.stdin时返回真值, 否则返回假值。

    fileinput.nextfile函数会关闭当前文件,跳到下一个文件,跳过的行并不计。

    在你知道当前文件已经处理完的情况下,就比較实用了。

    fileinput.close函数关闭整个文件链,结束迭代。

    $ cat numberlines.py

    # File : numberlines.py

    import fileinput

    for line in fileinput.input(inplace=1):

            line=line.rstrip()

            num=fileinput.lineno()

            print '%-40s # %2i' %(line,num)

    $ python numberlines.py  numberlines.py

    结果

    $ cat numberlines.py

    # File : numberlines.py #  1

    #  2

    import fileinput #  3

    #  4

    for line in fileinput.input(inplace=1): #  5

            line=line.rstrip()               #  6

            num=fileinput.lineno() #  7

            print '%-40s # %2i' %(line,num) #  8

    假设执行多次。则每次执行都会在每一行末尾加入多个行号。但这不一定是我们想要的效果。

    $ python numberlines.py  numberlines.py

    结果

    $ cat numberlines.py

    # File : numberlines.py #  1 #  1

    #  2 #  2

    import fileinput #  3 #  3

    #  4 #  4

    for line in fileinput.input(inplace=1): #  5 #  5

            line=line.rstrip() #  6 #  6

            num=fileinput.lineno() #  7 #  7

            print '%-40s # %2i' %(line,num) #  8 #  8

    警告:要小心使用replace參数——它非常easy破坏文件。应该在不使用inplace设置的情况下细測自己的程序。在确保程序工作正常后再改动文件。

    练习 遍历文本文件

    脚本内容

    $ cat fileinput-example-1.py

    #File : fileinput-example-1.py

    import fileinput

    import sys

    for line in fileinput.input("sys-argv-example-1.py"):

            sys.stdout.write("->")

            sys.stdout.write(line)

    运行结果

    $ python fileinput-example-1.py

    -># File:sys-argv-example-1.py

    ->

    ->import sys

    ->

    ->print "Script name is",sys.argv[0]

    ->

    ->if len(sys.argv) > 1:

    ->      print "there is",len(sys.argv)-1,"arguments:"

    ->      print [x for x in sys.argv[1:]]

    ->else:

    ->      print "there are no arguments!"

    练习 处理多文件

    脚本内容

    $ cat fileinput-example-2.py

    #File : fileinput-example-2.py

    import fileinput

    import sys,string

    import glob

    for line in fileinput.input(glob.glob("sys-exit-*.py")):

            if fileinput.isfirstline():

                    sys.stderr.write("-- reading %s -- " % fileinput.filename())

            sys.stdout.write(str(fileinput.lineno()) + " " + string.upper(line))

    运行结果

    $ python fileinput-example-2.py

    -- reading sys-exit-example-1.py --

    1 #FILE :SYS-EXIT-EXAMPLE-1.PY

    2

    3 IMPORT SYS

    4 PRINT "HELLO"

    5 SYS.EXIT(1)

    6 PRINT "THERE"

    7

    -- reading sys-exit-example-2.py --

    8 #FILE :SYS-EXIT-EXAMPLE-2.PY

    9

    10 IMPORT SYS

    11 PRINT "HELLO"

    12 TRY:

    13      SYS.EXIT(1)

    14 EXCEPT SYSTEMEXIT:

    15      PASS

    16 PRINT "THERE"

    17

    练习 转换CRLFLF

    $ cat fileinput-example-3.py

    #File : fileinput-example-3.py

    import fileinput,sys

    for line in fileinput.input(inplace=1):

            if line[-2:]==" ":

                    line=line[:-2]+" "

            sys.stdout.write(line)

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    spring中@value注解需要注意
    mysql创建utf-8字符集数据库
    Access denied for user 'root'@'localhost' (using password:YES) 解决方案[转]
    MySql 5.7.20安装
    Shiro 登录认证源码详解
    为什么说Java匿名内部类是残缺的闭包
    Java中的闭包之实例一
    使用Eclipse的Working Set管理项目
    glibc下载安装
    Struts2 整合 Hibernate 框架
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4854321.html
Copyright © 2011-2022 走看看