• Python 标准库之 fileinput 和 文件迭代器


    1. 使用 fileinput 进行迭代

    fileinput 模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的 input() 函数有点类似文件 readlines 函数,但区别明显:

    • readlines 是一次性读取文件中的全部内容,如果文件较大的话,会占用大量内存;
    • input 返回的则是一个迭代对象,结合 for 循环使用,典型用法如下:
    import fileinput
    
    for line in fileinput.input(filename):
        process(line)
    
    • 1
    • 2
    • 3
    • 4

    实例

    import fileinput
    
    for line in fileinput.input("D:/Users/data.txt"):
        print(line)
    
    • 1
    • 2
    • 3
    • 4

    注意,input 函数有多个参数:分别设置读取文件路径、读写模式、编码方式、缓冲区大小、备份文件扩展名等。

    此外,fileinput 模块还有很多常用的函数,这里介绍几个最常用的。

    函数名 说明

    • fileinput.input() 返回能够用于 for 循环遍历的对象
    • fileinput.filename() 返回当前文件的名称
    • fileinput.lineno() 返回当前已经读取的行的数量(或者序号)
    • fileinput.filelineno() 回当前读取的行的行号
    • fileinput.isfirstline() 检查当前行是否是文件的第一行
    • fileinput.isstdin() 判断最后一行是否从 stdin 中读取
    • fileinput.close() 关闭队列

    2. 文件迭代器

    #打开文件,一次写入多行内容
    f = open("D:/Users/data.txt",'w')
    content = ['append information1\n','append information2']
    f.writelines(content)
    f.close()
    
    #打开文件,通过文件迭代器遍历文件
    f = open("D:/Users/data.txt",'r')
    for line in f:
        print('content:',line)
    # 或者 将读取内容转化为字符串列表 效果类似 readlines
    lines = list(f)
    print(lines)
    #关闭文件
    f.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    执行结果(省略空行):

    content: append information1
    content: append information2
    
    • 1
    • 2

    3. 字典的 setdefault 方法使用举例

    如果仅当字典中不存在某个键值对时,才插入到字典中;如果存在,不必插入(也就不会修改键值对)。

    这种场景,使用字典自带方法 setdefault :

    In [35]: d = {'a':1,'b':2}
    
    In [36]: r = d.setdefault('c',3) # r: 3
    
    In [37]: r
    Out[37]: 3
    
    In [38]: d
    Out[38]: {'a': 1, 'b': 2, 'c': 3}
    
    
    In [39]: r = d.setdefault('c',33) # r:3,已经存在'c':3的键值对,所以setdefault时d无改变
    
    In [40]: r
    Out[40]: 3
    
    In [41]: d
    Out[41]: {'a': 1, 'b': 2, 'c': 3}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    字符设备和杂项设备总结
    linux套接字选项API
    Linux常用命令
    【Laravel系列7.8】广播系统
    网络编程中的IO模型
    视频怎么制作成gif动画?这个方法试试看
    【无标题】
    使用Visual Studio调试 .NET源代码
    c#设计模式-行为型模式 之 迭代器模式
    一个年薪20万软件测试工程师都具备的能力,你有吗?
  • 原文地址:https://blog.csdn.net/wohu1104/article/details/125055526