zoukankan      html  css  js  c++  java
  • Python基础学习笔记(08)文件操作

    Python基础学习(08)文件操作

    一、今日内容大纲

    • 初识文件操作
    • 文件操作的模式
    • 文件操作的其他功能
    • 打开文件的另一种方式
    • 文件的修改操作

    二、文件操作的初识

    1. 利用Python操作为文件,需要的必要参数:

      • 文件路径:Path

      • 打开方式:只读、只写、追加、写读、读写

      • 编码方式:UTF-8、GBK、GB2312等

    2. 文件的基本操作

      先观察一段文件操作的代码:

      f1 = open(r'D:PythonPython Projectday08Japanese Porn.txt',encoding= 'utf-8',mode= 'r')
      content = f1.read()
      print(content)
      f1.close()
      
      • open 是系统内置函数,open 底层调用的是操作系统的接口
      • f1 变量又可写作 f1、fh、file_handler、f_h 等,译为文件句柄,Python语言中对文件进行的任何操作,都需要通过调用文件句柄的函数来实现。
      • encoding 参数可以省略,不写参数会按照操作系统默认的编码来操作
      • close 为关闭文件句柄,每次打开文件后都需要及时关闭文件句柄,否则会占用过多内存。
    3. 文件操作三部曲:

      • 打开文件
      • 对文件句柄进行相应的操作
      • 关闭文件句柄
    4. 报错情况

      • 路径问题:反斜杠会引起歧义
        • 解决方式一:双反斜杠消除歧义,如:'d:Japanese Porn.txt'
        • 解决方式二:使用 raw 字符串,在路径字符串前加字母 r ,就无需使用转义字符了,如:r'd:Japanese Porn.txt'
      • 编码问题:文件存储和打开时用的编码不一致
      • 文件名问题:文件名问题:文件名不可以设置成纯数字,否则会无法识别

    三、文件操作的模式(mode)

    1. 文件的读取操作:r 模式、rb 模式、r+ 模式、r+b 模式

      首先先在 py 文件根目录下创建一个”文件的读“文本文件和一个”美女.jpg“图片文件(这样读取时可以只需提供相对路径),供我们读取,其中文本文件内容我们编辑为:

      太白金星最帅
      老男孩最好的老师
      老男孩教育是最好的学校
      dasfasfdasfsda
      asdqwedqwe
      
      • r 模式:操作的是文本文件,会将读取的字节转换成字符

        # 1.read() 
        f = open('文件的读', encoding='utf-8')        # mode是r可以默认不写
        1. read() 全部都出来
        content = f.read()
        print(content)                         		# content 为字符串数据类型
        f.close()
        
        # 2.read(n) 按照字符数量读取,如reaad(n)为读取前n个字符
        content = f.read(4)
        print(content)
        f.close()									# result: 太白金星
        
        # 3.readline() 读一行
        line = f.readline()
        print(line)
        f.close()									# result: 太白金星最帅.
        
        # 4. readlines() 返回一个列表,列表中的每个元素是源文件的每一行
        l1 = f.readlines()
        print(l1)
        f.close()
        # result: ['太白金星最帅
        ', '老男孩最好的老师
        ', '老男孩教育是最好的学校
        ', 'dasfasfdasfsda
        ', 'asdqwedqwe']
        
        # 5. for 读取(占用内存最低,对于大文件最友好)
        for line in f:
            print(line)
        f.close()
        # result:
        # 太白金星最帅
        #
        # 老男孩最好的老师
        #
        # 老男孩教育是最好的学校
        #
        # dasfasfdasfsda
        #
        # asdqwedqwe
        
      • rb 模式:操作的是非文本文件,不会将读取的字节转换成字符

        f = open('美女.jfif',mode='rb')              # 带b的模式操作文件不需要声明编码方式
        content = f.read()
        print(content)
        f.close()
        # result: 
        # b'xffxd8xffxe0x00x10JFIFx00x01x01x01x00Hx00Hx00x00xffxdbx00Cx00x07x05x05x06x05x04x07x06x05x06....
        
    2. 文件的写入操作:w 模式、wb 模式、w+ 模式、w+b 模式

      • w 模式:主要操作文本类文件

        # 没有文件,创建文件,写入内容
        fh = open('文件的写', encoding='utf-8', mode='w')
        fh.write('随便写一点')
        fh.close()
        # 如果文件存在,会先清空原文件内容,再写入新内容
        fh = open('文件的写', encoding='utf-8', mode='w')
        fh.write('再写一点')
        fh.close()
        
      • wb 模式:主要操作非文本类文件,也可操作文本类文件

        # 为了能够成功写入图片,我们参考学习读时的图片的机器语言
        f = open('美女.jpg',mode='rb')
        content = f.read()
        f.close()
        f1 = open('美女2.jfif', mode='wb')
        f1.write(content)
        f1.close()
        
    3. 文件的追加操作:a 模式、ab 模式、a+ 模式、a+b 模式

      • a 模式

        # a 模式
        # 没有文件会创建文件,追加内容
        f = open('文件的追加', encoding='utf-8', mode='a')
        f.write('太白最帅。。。')
        f.close()
        # 有文件会再后面追加
        f = open('文件的追加', encoding='utf-8', mode='a')
        f.write('老八秘制小汉堡')
        f.close()
        
    4. 文件的其他操作模式:

      # r+ 模式:读和追加
      f = open('文件的读写', encoding='utf=8', mode='r+')
      content = f.read()
      print(content)
      f.write('简简单单的晚饭')
      f.close()
      
    5. 文件操作中的”光标“

      文件的操作存在一个“光标”的概念,当你进行读写操作时,光标会随之进行移动,如 f.read() 操作后光标会随着读取停止在文件内容最后一位,此时在进行写的操作,会从光标的位置继续写入。如果在r+模式下先写后读,光标写入覆盖之前的数据,且容易因为不同字符byte占用不同情况引起乱码,所以不能使用。

    四、文件操作的其他功能

    1. tell() 获取光标的位置,单位为字节

      # tell() 获取光标的位置,单位为字节
      f = open('文件的读', encoding='utf-8')    # mode是r可以默认不写
      print(f.tell())
      f.read()
      print(f.tell())                         # content 为字符串数据类型
      f.close()
      # result:
      # 0
      # 107
      
    2. seek() 调整光标的位置,单位为字节,返回光标的位置,seek(0, 2)代表将光标调整至末尾

    3. flush() 强制刷新,添加在写入数据之后,可以有效保存数据

      # flush() 强制刷新,添加在写入数据之后,可以有效保存数据
      f = open('文件的其他功能', encoding='utf-8', mode='w')
      f.write('asdasd')
      f.flush()
      f.close()
      

    五、打开文件的另一种方式

    # 优点1:不用手动关闭文件句柄,会一定时间内自动关闭
    with open('文件的读', encoding='utf-8') as f1:
        print(f1.read())
    # 优点2:可以同时操作多个文件句柄
    with open('文件的读', encoding='utf-8') as f1,
            open('文件的写', encoding='utf-8', mode='w') as f2:
        print(f1.read())
        f2.write('dasdas')
    # 缺点:待续
    

    六、文件的修改操作

    文件修改的核心步骤:

    • 以读的模式打开原文件
    • 以写的模式创建一个新文件
    • 将原文件的内容读出来修改成新内容,写入新文件
    • 将原文件删除
    • 将新文件重命名成原文件

    首先先在 创建一个”alex自述“文本文件,供我们读取和修改,其中文本文件内容我们编辑为:

    alex是老男孩python发起人,创建人。
    
    alex其实是人妖。
    
    谁说alex是sb?
    
    你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
    
    # low 版
    import os
    # 1.以读的模式打开原文件
    # 2.以写的模式创建一个新文件
    with open('alex自述', encoding='utf-8', mode='r') as f1,
            open('alex自述.bak', encoding='utf-8', mode='w') as f2:
    # 3.将原文件的内容读出来修改成新内容,写入新文件
        old_content = f1.read()
        new_content = old_content.replace('alex', 'SB')
        f2.write(new_content)
    # 4.将原文件删除
    os.remove('alex自述')
    # 5.将新文件重命名成原文件
    os.rename('alex自述.bak','alex自述')
    
    
    # 进阶版
    import os
    # 1.以读的模式打开原文件
    # 2.以写的模式创建一个新文件
    with open('alex自述', encoding='utf-8', mode='r') as f1,
            open('alex自述.bak', encoding='utf-8', mode='w') as f2:
    # 3.将原文件的内容读出来修改成新内容,写入新文件
        for line in f1:
            new_line = line.replace('SB','alex')
            f2.write(new_line)              # 文件句柄还未关闭,所以不会重新覆盖
    # 4.将原文件删除
    os.remove('alex自述')
    # 5.将新文件重命名成原文件
    os.rename('alex自述.bak','alex自述')
    
  • 相关阅读:
    22、编译安装nginx及性能优化
    21、nginx之ngx_http_proxy_module模块
    20、nginx之ngx_http_upstream_module模块
    19、修改文件描述符
    8、负载均衡HAproxy部署
    6、负载均衡HAproxy介绍
    17、ansible配置管理
    18、通过yum命令只下载rpm包不安装
    16、编译安装ansible
    python余弦相似度
  • 原文地址:https://www.cnblogs.com/raygor/p/13254058.html
Copyright © 2011-2022 走看看