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

    一丶文件

      1.什么是文件

        文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口
        用户/应用程序(open())
        操作系统(文件)
        计算机硬件(硬盘)

      2.为什么要有文件

        用户/应用程序可以通过文件将数据永久保存的硬盘中
        即操作文件就是操作硬盘

        用户/应用程序直接操作的是文件,对文件进行的所有的操作,都是
        在向操作系统发送系统调用,然后再由操作将其转换成具体的硬盘操作

      3.如何使用文件:

    # 1.打开文件和文件路径的问题
    # 由应用程序向操作系统发起系统调用open(...) f的值是一种变量,占用的是应用程序的内存空间
    f = open(r'a.txt',mode='r')
    
    # windows路径分隔符问题
    # open('C:a.txt
    bcd.txt')
    # 解决方案一:推荐
    # open(r'C:a.txt
    bcd.txt')
    # 解决方案二:
    # open('C:/a.txt/nb/c/d.txt')
    
    
    # 2.操作文件:读/写文件,应用程序对文件的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把输入读入内存、或者写入硬盘
    res=f.read()# 读取所有内容,执行完该操作后,文件指针会移动到文件末尾
    
    # 3、关闭文件
    f.close() # 回收操作系统资源
    del f     # 回收应用程序资源
    View Code

    二丶文件的基本操作

      2.1 资源回收和with上下文管理

        在上文我们提到了文件的打开和关闭,而打开一个文件会有两部分资源:应用程序的变量f和操作

              系统打开的文件。在操作完毕时我们必须要回收,否则内存就会溢出,而回收方式就是上文提到的两个关闭,

        def f一定要跟在f.close()之后,但是python的回收机制让我们不用写def f,只写f.close()就行,

        但还是有人会忘记,所以就有了with这个管理方法。

    # 1、在执行完子代码块后,with 会自动执行f.close()
    with open('a.txt',mode='r') as f:
        pass
    
    # 2、可用用with同时打开多个文件,用逗号分隔开即可
    with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
        pass
    
    # 下面的代码和上面的意思一样    的存在只是为了让代码分行
    with open('a.txt',mode='r') as f1,
            open('b.txt',mode='r') as f2:
         pass

      2.2 指定文本文件的字符编码:

        强调:t(文本)和b(二进制)不能单独使用,必须跟r/w/a连用

        在打开t(文本)文件时会有乱码问题,这就用到open()中一个重要的参数 :encoding=字符编码

        如果没有设置encoding那操作系统就会使用默认的编码格式  window为gbk  linux为utf-8  

        上节课我们也学到了用什么编码存 就用什么编码取

    with open('c.txt',mode='rt',encoding='utf-8') as f:
        res=f.read() # t模式会将f.read()读出的结果解码成unicode

      2.3 以t模式为基准进行内存操作

        2.3.1 r模式的使用:

    # r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置
    with open('c.txt',mode='rt',encoding='utf-8') as f:
        res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res
    
    练习:判断用户登入功能
    inp_username = input('输入账号:')
    inp_password = input('输入密码:')
    with open('a.txt',mode='rt',encoding='UTF-8') as f:
        for line in f:
            username,password = line.strip().split(':')#
            if username == inp_username and password == inp_password:
                print('登入成功')
                break
        else:
            print('账号密码错误')

       

         2.3.2 w模式的使用:

    # w:只写模式,当文件不存在时会创建空文件,当文件存在会清空文件,指针位于开始位置
    # with open('d.txt',mode='wt',encoding='utf-8') as f:
        # f.read() # 报错,不可读
        # f.write('aaa
    ')
    
    #强调:
    # 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
    with open('d.txt',mode='wt',encoding='utf-8') as f:
        f.write('a
    ')
        f.write('b
    ')
        f.write('c
    ')
    
    # 2 如果重新以w模式打开文件,则会清空文件内容
    with open('d.txt',mode='wt',encoding='utf-8') as f:
         f.write('a
    ')
    with open('d.txt',mode='wt',encoding='utf-8') as f:
         f.write('b
    ')
    
    # 案例:w模式用来创建全新的文件
    # 文件文件的copy工具
    src_file=input('源文件路径>>: ').strip()
    dst_file=input('源文件路径>>: ').strip()
    with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,
        open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
        res=f1.read()
        f2.write(res)

        2.3.3 a模式的使用:

    # a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
    with open('c.txt',mode='a',encoding='utf-8') as f:
    #    f.read() # 报错,不能读
         f.write('sdfsd
    ')
         f.write('sdf
    ')
    #强调 w 模式与 a 模式的异同:
    # 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
    # 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后
    
    # 小练习:实现注册功能:
    name=input('输入姓名: ').strip()
    pwd=input('输入密码: ').strip()
    with open('q.txt',mode='a',encoding='utf-8') as f:
        f.write('{}:{}
    '.format(name,pwd))

        了解:r+ w+ a+ :可读可写  在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式

        

        

        

  • 相关阅读:
    poj 2488 DFS
    畅通工程 并查集模版
    KMP 模板
    poj 1426 DFS
    poj 2528 线段数
    poj 3468 线段数 修改区间(点)
    CVPR2012文章阅读(2)A Unified Approach to Salient Object Detection via Low Rank Matrix Recovery
    如何制定目标
    Saliency Map 最新综述
    计算机视觉模式识别重要会议杂志
  • 原文地址:https://www.cnblogs.com/bk134/p/12487465.html
Copyright © 2011-2022 走看看