IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]8.3 fileinput--多文件输入操作

    caimouse发表于 2016-03-27 22:07:30
    love 0

    本模块主要提供了循环地输入一个文件或者多个文件的操作类和函数。如果只是想操作一个文件,只需要使用函数open()就可以了。

    典型的使用场合如下:

    import fileinput

    for line in fileinput.input():

        process(line)

     

    fileinput.input(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None) 

    创建一个FileInput类实例。参数files是文件列表,其它参数与FileInput类的构造函数一样的。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        for line in f:

            print(line)

    结果输出如下:

    #python 3.4

     

    import calendar

     

    import datetime

     

     

     

    for i in calendar.day_name:

     

        print(i, end = ',')

     

    print('\n','-'*20)

     

    for i in calendar.day_abbr:

    ......

    通过这个例子可以看到使用fileinput在多个文件打开情况下,并且读取所有内容,不需要依次地打开每一个文件。

     

    fileinput.filename() 

    返回当前正在读取文件的文件名称。如果还没有读取时,返回None。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.filename())

        for line in f:

            print(line)

            print(fileinput.filename())

            break

    结果输出如下:

    None

    #python 3.4

     

    F:\Temp\py\cal_1.py

     

    fileinput.fileno() 

    返回当前打开文件的文件描述符号,如果没有文件打开返回-1。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.fileno())

        for line in f:

            print(line)

            print(fileinput.fileno())

            break

    结果输出如下:

    -1

    #python 3.4

     

    3

     

    fileinput.lineno() 

    返回当前累计读取的文件的行数序号。如果没有读取,返回0。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.lineno())

        for line in f:

            print(line)

            print(fileinput.lineno())

            break

    结果输出如下:

    0

    #python 3.4

     

    1

     

    fileinput.filelineno() 

    返回当前这个文件的行号。如果没有读取返回0。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.filelineno())

        for line in f:

            print(line)

            print(fileinput.filelineno())

            break

    结果输出如下:

    0

    #python 3.4

     

    1

     

    fileinput.isfirstline() 

    判断是否读取文件的第一行,如果是返回True,否则返回False。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.isfirstline())

        for line in f:

            print(line)

            print(fileinput.isfirstline())

            break

    结果输出如下:

    False

    #python 3.4

     

    True

     

    fileinput.isstdin() 

    如果正在从sys.stdin输入就返回True,否则返回False。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.isstdin())

        for line in f:

            print(line)

            print(fileinput.isstdin())

            break

    结果输出如下:

    False

    #python 3.4

     

    False

     

    fileinput.nextfile() 

    关闭当前文件,跳到下一个文件读取第一行。跳过剩余的行数,不会计算到行号里。如果在第一个文件读取之前调用,不起作用。如果正在读取下一个文件的第一行也不起作用。如果是最后一个文件最一行了,也不起作用。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        print(fileinput.nextfile())

        for line in f:

            print(line)

            print(fileinput.nextfile())

            break

    结果输出如下:

    None

    #python 3.4

     

    None

     

    fileinput.close() 

    关闭输入序列文件。

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.input(files=pathstr) as f:

        for line in f:

            print(line)

            print(fileinput.close())

            break

    结果输出如下:

    #python 3.4

     

    None

     

    class fileinput.FileInput(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None) 

    提供文件输入类的构造函数。

    参数files是输入文件列表;参数inplace为True时,表示直接替换backup文件,否则不替换;参数backup是指定备份的文件后缀名称,默认为.bak;参数bufsize是指明读取文件缓冲区的大小;参数mode是打开文件的模式,可以使用r、rU、U和rb等模式;参数openhook是用来对文件进行特定的操作,比如对文件先解压、解密等,它必须支持两个参数:文件名称和读写模式。

    fileinput.hook_compressed(filename, mode) 

    用来实现压缩相关的操作,一般这样使用:

    fi = fileinput.FileInput(openhook=fileinput.hook_compressed)

     

    fileinput.hook_encoded(encoding) 

    用来实现编码相关的操作,一般这样使用:

    fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))

    例子:

    #python 3.4

    import fileinput

     

    pathstr = ('F:\\Temp\\py\\cal_1.py', 'F:\\Temp\\py\\bisect2.py')

    with fileinput.FileInput(files=pathstr) as f:

        for line in f:

            print(line)

            print(fileinput.close())

            break

    结果输出如下:

    #python 3.4

     

    None

     


    蔡军生  QQ:9073204  深圳



沪ICP备19023445号-2号
友情链接