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)

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

  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4854321.html
Copyright © 2011-2022 走看看