• 十一.文件


    1.小文件操作

    # #-------------------以下只适合读小文件-----------------------
    #打开当前目录下的文本文件
    filename="testfile1.txt"
    f=open(filename,"r",encoding="utf-8")  #文件句柄,"r表示只读(默认)
    #.read()没有参数表示全部读完,将文件内容放到一个字符串变量中,字符串变量可能包含换行符
    print(f.read())
    print(f.read()) #上面已经读完,没有结果
    f.close()
    
    g=open(filename,"w")  #文件句柄,"w"表示重头只写(全部重新写,不是按行覆盖)
    g.write("My name is ZhangYuan
    ")
    g.close()
    
    k=open(filename,"a")  #文件句柄,"a"表示末尾只写(尾部追加)
    k.write("TEST1") #写入时如果没有加入换行号"
    "则不换行
    k.write("TEST2
    ")
    k.write("TEST3
    ")
    k.write("TEST4
    ")
    k.close()
    
    # f.readline()表示逐行读取
    f=open(filename,"r",encoding="utf-8")
    for i in range(3):
        print(i,f.readline())
    f.close()
    
    # f.readlines()全部读取,自动将文件内容按行分成一个列表
    f=open(filename,"r",encoding="utf-8")
    R=f.readlines()
    print(R,"Finish") #['My name is ZhangYuan
    ', 'TEST1TEST2
    ', 'TEST3
    ', 'TEST4
    '] Finish
    for index,line in enumerate(R):
        print(index,line.strip()) #直接print(line)包括空格和换行,用strip()可去除
    f.close()

    2.大文件操作

    #-------------------------以下适合大文件----------------------------------
    print("以下适合大文件")
    f=open(filename,"r")
    #每次读取只保存一行到内存,不会累积内存
    count=0
    for line in f:
        print(count,line,"不积累内存")
        count+=1
    f.close()
    
    #with语句自动关闭文件,下面的方式适合大文件读取
    with open("testfile1.txt","r",encoding="utf-8") as f1:
        for line in f1:
            print(line,"with语句")
    
    #用fileinput模块读取大文件
    import fileinput
    for line in fileinput.input(filename):
        print(line,"fileinput模块")

    3.with语句,可以自动关闭打开的文件

    #with语句自动关闭文件,下面的方式适合大文件读取
    with open("testfile1.txt","r",encoding="utf-8") as f1:
        for line in f1:
            print(line)

    4.r+,w+,a+,二进制

    #硬盘上File文件的写入都是覆盖原位置,所以不存在直接性的在指定光标位置插入,除非进一步处理
    #文件先读后写(追加)
    f=open(filename,"r+",encoding="utf-8")
    print("first",f.readline())
    print("second",f.readline())
    f.write("
    ABCDEFG") #在文件最后写入,不是插入
    f.close()
    
    # #文件先写后读:w+模式,会覆盖全部文件
    # print("---先写后读---")
    # f=open(filename,"w+",encoding="utf-8")
    # f.write("
    先写后读")
    # print(f.readline(),"先写后读") #在最后追加,所以读取内容为空
    # print(f.readline(),"先写后读") #在最后追加,所以读取内容为空
    # f.close()
    
    # #文件先追加后读:a+模式
    # f=open(filename,"a+",encoding="utf-8")
    # f.write("
    先追加后读") #在文件最后写入,不是插入
    # print(f.readline(),"a+模式") #在最后追加,所以读取内容为空
    # print(f.readline(),"a+模式") #在最后追加,所以读取内容为空
    # f.close()
    
    #以二进制方式
    print("---二进制---")
    f=open(filename,"rb") #二进制不能传递encoding="utf-8"参数
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()
    g=open(filename,"ab")
    g.write("
    Hello World
    ".encode())
    g.close()

    5.强制刷新

    #强制刷新(确认下内存或缓存中的数据已经写入硬盘,有时候写入的数据会保存到缓存,出问题就不能保存在硬盘了)
    print(f.flush())
    f.close()

    6.其他操作

    #f.tell(),f.seek()光标操作
    filename="testfile1.txt"
    f=open(filename,"r",encoding="utf-8")
    print(f.tell()) #按字符来计数返回file读取位置---0
    print(f.readline())
    print(f.tell()) #按字符来计数返回file读取位置---22
    f.seek(0) #光标回到0
    print(f.tell()) #---0
    
    #返回编码方式
    print(f.encoding)
    
    #截断前20个字符保留,其余删除。不输入则全部清空
    # f=open(filename,"a",encoding="utf-8") #如果是"w",表示file以新文件打开,里面没有内容,截断内容只能用"a"
    # f.truncate(20) #截断前20个字符保留(跟光标位置无关)
    # f.close()
  • 相关阅读:
    java如何导入Excel文件
    C/S框架设计经验小结
    WebClient以POST方式发送Web请求
    如何自动拼接 Update语句,仅Update已修改的字段
    DataGridView如何快速导出Excel
    【转】基于STM32F103内部AD测量电池电压
    【转】stm8 rtc时钟
    【转】NiOS II从EPCQ256的自启动设置
    【转】验收代码寄存器和验收屏蔽寄存器
    【转】eclipse : Type Symbol 'xxx' could not be resolved 解决办法
  • 原文地址:https://www.cnblogs.com/i201102053/p/10651531.html
Copyright © 2020-2023  润新知