zoukankan      html  css  js  c++  java
  • 文件的处理

    文件的处理

    1、什么是文件
        文件就是操作系统提供给应用程序来操作硬盘的虚拟的概念
    
    2、为什么要用文件
        因为人类和计算机要永久保存数据
    
    3、怎么用文件
    
      采用:open()
    相对路径:a.txt  # 必须与当前py文件在同一级目录   #### 一般建议多用相对路径
    绝对路径:D:项目路径python13期day07a.txt  本机保存的位置
    
    """
    
    文件上下文:
    f= open('文件路径','打开文件模式','指定支付的编码')
    
    # f = open("a.txt")  用这个来用文件
    #
    # print(f.readable())  # 判断当前文件是否可读
    # print(f.writable())  # 判断当前文件是否可写
    
    以下记得添加
    # # del f  # 回收变量资源
    # f.close()  # 回收操作系统的资源
    with 自动帮你回收操作系统的资源   del f  需要自己自己加上
    # with open(r"my testing.py",mode = 'r',encoding= 'utf-8') as f:
    #     # print(f.read())
    #     # prinf = open("E:PycharmProjectsstudymy testing.py")
    # # print(f.readable())
    # # print(f.writable())
    # # print(f)t(f.readline())
    #     print(f.readlines())
    
    # r:防止转义  防止出现不必要的信息 影响运行
    举例如下
    # with open(r'D:项目路径python13期day07a.txt')as f:
    #     print(f.read())   # 读取文件
    
    
    
    打开文件的三种模式:
        r :
            1、只读
            2、如果文件不存在,会报错
        w:(慎用)
            1、只写
            2、如果文件不存在,则新建一个文件写入数据
            3、如果文件内存在数据,会将数据清空,重新写入
        a:
            1、追加写
            2、如果文件内存在数据,会在已有数据的后面追加数据
            3、如果文件不存在,则新建一个文件写入数据
            
            r:
             with open(r"my testing.py",mode = 'r',encoding= 'utf-8') as f:
     		      print(f.read())
     		      print(f.readline())
                  print(f.readlines())
                  
             w
             with open(r'my testi.py',mode = 'w',encoding = "utf-8") as f:
                  f.write('meihao shijie 世界之大')
                  f.writelines(['meihaoshijie
     women de guojia'])文本模式
                  
              a
              with open(r'my testi.py', mode='a', encoding="utf-8") as f:
                   f.write('zhege shiie  非常的美好 这个是字符串')
                   
               控制文件读写内容的处理模式   
               tb模式不能单独使用,必须与r/w/a之一结合使用
               
               t 默认的是:文本模式
               1.读写文件都是以字符串为单位的;
               2.只能针对文本文件;
               3.必须指定encoding参数。
               
               b:二进制模式:
               1.读写文件都是以bytes/二进制为单位的;
               2.针对所有文件;
               3.一定不能指定encoding参数。
               
               
         b      
      with open(r'E:PycharmProjectsstudymy testing.py',mode ='rb') as f:
         print(f.read())
    
      with open(r'E:PycharmProjectsstudy.idea11.jpg', mode='rb') as rf,
              open(r'ling.png', mode='wb') as wf:
          ling = rf.read()
          wf.write(ling)
          
          
         文件处理的内置方法:
         读:
         f.read() #读文本:一次性独处所有的数据;
         f.readline()# 一次只读一行
         f.readlines()# 将数据全部读入内存,以换行符分隔,存入列表。
         
         写 
         f.write()#写文件
         f.writeable #是否可写
         f.writelines()#for + f.write()
         
         
         
         # inp_name = input('请输入你的名字:').strip()
    # inp_pwd = input('请输入你的密码:').strip()
    # with open(r'aaa.txt','r',encoding = 'utf-8') as f:
    #     for line in f:
    #         u,p = line.strip('
    ').split(' ')   ###解压赋值
    #         if inp_name == u and inp_pwd == p:
    #             print('登录成功')
    #         else:
    #             print('账号名或者密码错误')
              
    
    

    ‘+’的模型

    1、其他的文件模式
            r+
            w+
            a+
        ps:都说可读可写,而且带着原来的特性
            一般是不用的
            
            with open(r'aaa.txt','r+',encoding = 'utf-8') as f:
        print(f.read())
        f.write('在那个地方')
        >>>>>>>
        我们都会阿豪都爆破包租婆
        在那个地方在那个地方
    

    光标的移动

    f.seek(offset,whence)
    offset: 相对偏移度 (光标移动的位数)针对的是字节
    whence:指定光标位置从何开始
        0:从文件开头  t,b都是可以的
        1:从当前位置   b是可以的
        2:从文件末尾   b是可以的
        1,2 也可以使用,但是光标不能移动  ### 相对偏移度始终为“0”
        f.read()
        读出文件所有内容
        文件过大,会造成内存溢出
        f.read('int类型的参数')
        ps:
        rt:针对的就是字符
        rb:针对的是字节
         utf-8:
            中文是3个bytes
            英文是1个bytes
        gbk:
            中文的是2个bytes   英文的半角是1个bytes   全角的是2个bytes
            
            aaa.txt  :我们都会阿豪都爆破包租婆
            t
            with open(r'aaa.txt','rt',encoding = 'utf-8') as f:
        f.seek(3,0)
        print(f.tell())  #查询当前的指针位置
    
        print(f.read(2))
        >>>>>>>
        3
        们都
        
         ###1,2 也可以使用,但是光标不能移动  ### 相对偏移度始终为“0”####
        with open(r'aaa.txt','rt', encoding = 'utf-8') as f:
        f.seek(-3, 2)  #报错 光标不能移动
        print(f.tell())
    
        print(f.read(2))
        >>>>>>>
        Traceback (most recent call last):报错
      File "E:/PycharmProjects/study/11.8.py", line 72, in <module>
        f.seek(-3, 2)
    io.UnsupportedOperation: can't do nonzero end-relative seeks
    不报错的操作
    with open(r'aaa.txt','rt', encoding = 'utf-8') as f:
        f.seek(0, 2)  ###相对的便宜度为“0”
        print(f.tell())
    
        print(f.read(2))
        >>>>>>>>
        我们
        6
    
        
    

    检测文件是否发生变化

     1、通过f.seek(0,2),将光标移动到文件末尾
            2、通过while循环,让文件保持打开状态
                1、通过f.readline(),获取当前光标所在行的内容
                2、通过if判断,是否获取到数据,获取到数据,说明,文件被改动
                3、print
    

    获取文件的实时监控

    import time  ###定义的函数 
    res = time.strftime('%Y-%m-%d %H:%M:%S')
    
    with open(r'aaa.txt','a',encoding = 'utf-8') as f:
        f.write(f'{res} 马上就要学函数了,加油
    ')
        
      下面是实时监控的编程  
    with open(r'aaa.txt','r',encoding = 'utf=8') as f:
        f.seek(0,2)
        while True:
            res = f.readline()
            if res:
                print(f'录入记录:{res}')
                
                
                
    
    

    文件的修改

    一种方法
    with open(r'name.txt','r',encoding = 'utf-8') as f:
        data = f.read()
        #print(data)
    
    with open(r'name.txt','w',encoding = 'utf-8') as f:
        res = data.replace('tank','DSB')
        print(f.write(res))
        >>>>>>>
        sean 是DSB, Sean是非常大的DSB,Sean和他们的同事都是非常大的DSB!
        
        另外一种方法  这种方法是新建一个文本替代旧的文本,来操作   优先考虑这种
        import os
    with open(r'aaa.txt','r',encoding = 'utf-8') as rf, open(r'b.txt','w',encoding = 'utf-8') as wf:
        data = rf.read()
        res = data.replace('关键','好好')
        wf.write(res)
    
    os.remove(r'aaa.txt')
    os.rename('aaa.txt','b.txt')
    
    
    4、文件修改:
            1、将数据一次性全部读入内存,在内存修改该数据,
                写入原文件
    
                优点:
                    从始至终只有一个文件
                缺点:
                    如果文件过大,会造成内存溢出
            2、使用两个文件,将原文件的数据一行行读到内存,修改之后写入新文件,
                通过os模块,将原文件删除,将新文件名称改查原文件
                优点:
                    从始至终,内存中只有一行数据
                    对内存的压力小
                缺点:
                    通过两个文件来实现的
    
    
    
    
    
    文本:我们是虚构好过航空你看过
    截断 
    with open(r'aaa.txt','r+',encoding = 'utf-8') as f:
        f.truncate(6)  # 这个操作截断的功能
        print(f.read())
        # f.seek(-3,2)
        # print(f.tell())
        >>>>>>
        我们
        
        
        f.flush()  # 将内存中数据刷到硬盘
    
  • 相关阅读:
    组合数问题
    [Repost] 悬线法
    图论 List
    杂项 List
    动态规划 List
    Binary Search
    树状数组,Fenwick Tree
    HDU1086判断线段相交
    高效大数模板
    HDUOJ2298三分加二分
  • 原文地址:https://www.cnblogs.com/bs2019/p/11827263.html
Copyright © 2011-2022 走看看