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,要么只读,要么只写,一般不用可读可写的模式

        

        

        

  • 相关阅读:
    二维前缀和
    素数筛法
    dp-最大连续子序列的和
    dp-最长递增子序列 (LIS)
    dp-完全背包(题)
    dp-多重背包
    dp-完全背包
    DP-01背包 (题)
    DP- 01背包问题
    DP-直线分割递推
  • 原文地址:https://www.cnblogs.com/bk134/p/12487465.html
Copyright © 2011-2022 走看看