• 环境小硕的转行之路-8-文件操作


    前言


    最近几天学到了很多东西,准备好做第一个'大作业'(ATM机+商店)。总结一下这几天学到的知识。大作业可能要写3~5天。准备战斗!

    文件操作


    不符合正常编写规范难以对文件内容进行修改,应该给文件的打开对象赋一个变量后,对变量进行操作,以实现对文件对象的修改。这个变量通常称为文件句柄

    句柄赋值


    ps:后面的test file 为一个text文件里面只有一行:This quick brown fox jumped over the lazy dog.

    f = open("test file",'r',encoding="utf-8")#一般称f为文件句柄(包括了文件的字符集、大小、内存中的起始位置)。
    data1 = f.read()#默认读全部,()填数字代表读到文件中最大index(光标处)处。
    data2 = f.read()
    print(data1)
    print(data2)#打印不出data2,原因:第一次读f.read,文件中的光标已经到了最后一行,再往下全是空白。
    f.close()
    

    几种文件的打开方式


    f = open("test file",'a')#以追加的方式打开文件,无法读取数据可以在后面追加数据,不会清空文件
    f = open("test file",'r')#以读取的方式打开文件,无法改变文件内容
    f = open("test file",'r')#以写入的方式打开文件,先清空文件,后可以执行write语句。
    f = open("test file 2",'r+')#这种格式为'读写'既能读又能写,不会清空原
    f = open("test file 3",'w+') #这种格式为'读写'既能读又能写,但一开始清空文件
    f = open("test file 3",'rb') #以二进制的格式去读文件,不能有encoding参数
    f = open("test file 3",'wb') #以二进制的格式去写文件,只能传入byte_like 的数据,写的时候必须指定encoding。(必须知道现在是什么字符集)
    

    跨平台、数据流视频的时候使用二进制。

    文件的读取(要求:读取文件所有内容)


    print(f.readline())#读取了第一行,光标移到第二行开头。
    '''法1'''
    f = open("test file",'r',encoding="utf-8")。
    for lines in f.readlines():#.readlines可生成一个列表,依次将文件每行的数据变成列表中的值。
        print(lines.strip())
        f.close()   
    '''法2'''
    f = open("test file",'r',encoding="utf-8")
    for index,line in enumerate(f.readlines()): #这种读法(一次性全读完)容易造成电脑卡死。
        if index == 2:
            print('----我是分割线-----')
            continue
        print(line.strip())
    f.close()
    '''法3'''
    for line in f:
        print(lines.strip)
    

    小结:法1,2生成了一个列表需要读取文件全部内容,容易卡死。而法3则是生成了一个迭代器(后面会学),不容易造成卡死。

    文件的读取


    f = open("test file 2",'r',encoding="utf-8")
    print(f.read(20))#输出为This quick brown fox jumped over the lazy dog.
    print(f.tell()) #返回文件中光标指针的位置(按照字符的个数记),输出为20
    f.seek(0)#把光标移回一开始
    print(f.encoding)#输出编码文件的方式
    f.flush()#一次性将所有数据刷到硬盘上,不经过缓存。存钱
    print(f.fileno())#返回文件句柄在内存中的编号
    #f.truncate(50)#默认清空文件,填入数字,在第n个字符串后面全部删除。和光标没有关系
    

    文件的写入


    f = open("test file 3",'w+',encoding="utf-8") #这种格式为'读写'既能读又能写
    print(f.readline())
    print(f.readline())
    f.write("-----
    ")
    f.write("-----
    ")
    f.write("-----
    ")
    f.write("-----
    ")
    f.seek(10)
    f.write("step in position 10")#仍然写在了末端
    print(f.readline())
    with open('test file 3','r') as f1 ,
        open('test file 2','r') as f2: #用with open方法用完文件后自动关闭,可以防止文件句柄占用内存。打开多个文件用这种格式。,表示代码换行
    
    --- 

    文件的修改

     • 文件修改的两种方式  
    1. 将文件数据放在内存中,在内存中修改会自动把原来内容“往后挤”,而在硬盘中会“自动覆盖”。  
    2. 打开一个文件,修改完了将全部数据写在新文件里。


    #修改文件特定的参数,如把fox改成pig
    import sys
    f = open('test file 3','r',encoding='utf-8')
    f_new = open('test file 3.bak','w',encoding='utf-8')
    
    for line in f:
        if "fox" in line:
            line =line.replace("fox","pig")
        f_new.write(line)
    sys.argv
    f.close()
    f_new.close()
    

    进度条缓慢生成的实现


    import sys,time
    print("-----第一组-------")
    for i in range(20):
        sys.stdout.write ("#")#代表打印
        time.sleep(0.1)#没有flush会等缓存区满了以后一下子蹦出来,将缓存刷到硬盘上
    print("
    ----第二组-------")
    for i in range(20):
        sys.stdout.write ("#")
        sys.stdout.flush()
        time.sleep(0.2)# '#'会缓慢地蹦出来
    

  • 相关阅读:
    视频质量评测标准——VMAF
    净化网络环境!可信数字内容版权服务解决方案发布
    如何用sysbench做好IO性能测试
    云栖专辑|阿里开发者们的第二个感悟:PG大V德哥的使命感与开放心态
    CRI 与 ShimV2:一种 Kubernetes 集成容器运行时的新思路
    阿里巴巴持续投入,etcd 正式加入 CNCF
    阿里系统软件迎战“双11”超高流量峰值全纪录
    从SQL Server CloudDBA 看云数据库智能化
    ls -l 权限后面有个点
    Error File: /admin/app/template.app.php at 285 line.
  • 原文地址:https://www.cnblogs.com/negu/p/11347529.html
Copyright © 2020-2023  润新知