【Python基础】文件处理

1. open(file,mode,encoding) 告诉操作系统打开文件,返回文件类型

会占用两块内存空间,一块是变量值所占的内存空间,一块是操作系统打开具体文件所占的空间

参数file
  • 文件的绝对路径(从磁盘开始写)/相对路径(从当前所在文件夹作为前缀)
参数mode
复制代码
###### 一类是控制文件读写操作的模式

* =r 只读文件(默认值);打开文件,文件指针默认在文件开头位置
* =w 存在则覆盖文件内容重写;文件不存在会创建;打开文件,文件指针开始默认在文件开头位置,清空原有数据
* =a 追加到文件末尾;文件不存在则创建;打开文件,文件指针开始默认在末尾
* =r+ 可读写文件,以读为准(如果文件不存在,会报错)
* =w+ 可读写文件,以写为准即打开文件,文件指针默认在开始位置,清空原有数据
* =a+ 读写方式打开,追加到文件末尾
复制代码
###### 一类是控制文件读写内容的模式即控制读写文件的格式

* t模式(默认) 仅针对文本文件
  * 文件内容是以字符串为单位的,在python3里面字符串类型是以unicode编码的二进制存在内存的,想要保存文件需要指定编码格式进行保存
  * 作用:
    * read的时候看到该模式将从硬盘读取数据的编码二进制 自动转换为 unicode编码的二进制到内存
    * write的时候看到该模式将内存的unicode二进制数据保存为指定的编码格式
* b模式即二进制模式 针对所有类型文件
  * 作用:
    * 如是文本文件,则针对read需要将硬盘读取到的编码二进制 解码为unicode二进制在内存展示;如是write需要将文本内容unicode编码为指定编码格式
    * 如是非文本文件,则针对read直接读取硬盘的编码二进制;write
  * 注意:此模式下不需要指定参数encoding,非文本文件读的时候根据硬盘里面编码格式取,不需要按照指定编码取 转换为unicode
  • 上述两类模式需要结合使用
参数encoding
  • 告诉操作系统以何种编码方式打开文件
  • 如果是t模式,则一定要指定该参数
  • linux和mac是默认UTF-8; windows默认是GBK

2. read([n]) 向操作系统发送请求:一次性读(从硬盘读取到内存)文件全部内容并返回值

  • 调用: f.read()
  • 如果在t模式下,n代表移动的字符数;如果在b模式下,n代表的是移动的字节数
  • 文件指针位置:
    • 针对r模式,从打开文件时指针位置开始读, 读取完文件内容后在末尾
    • 针对w+模式,从文件末尾读取文件内容

3. write() 向操作系统发送请求:写文件内容

  • 调用:f.write()
  • 文件指针位置:
    • 针对w模式,从打开文件时指针位置开始写,写完文件内容后在末尾
    • 针对r+模式,从文件末尾写入文件内容

4.writelines(iter) 对可迭代对象遍历拼接一行写入

5.close() 向操作系统发送请求:关闭文件,操作系统回收资源

6.flush() 强制操作系统立即操作,尽量不使用


文件指针相关

7.seek(n,参照位置) 移动文件指针
  • 参数n代表字节数
  • 参数 参照位置分为0,1,2;其中1,2场景下不可应用到t模式
    • =0,则参照文件开头位置
    • =1,则参照指针当前位置
    • =2,则参照文件末尾位置
8.tell() 获取文件当前指针位置

修改文件

  • 不可直接修改硬盘数据,都是用新数据覆盖老数据
  • 修改文件的实质是修改的内存数据
    • 第1种修改文件的方式:将文件内容全部读取一起修改
      *

      复制代码
        with open(文件路径,mode='rt',encoding='utf-8') as f:
      
            res = f.read()
      
            l = list(res)
      
            l.insert(xx)
      
            new_res = ''.join(l)
      
        with open(文件路径2,mode='wt',encoding='utf-8') as f1:
      
            f1.write(new_res)
    • 第2种修改文件的方式:保证内存只有一行数据
      *

      复制代码
        with open(文件路径,mode=rt,encoding='utf-8') as f, open(文件路径2,mode='wt',encoding='utf-8') as f1:
         
            for line in f:
         
                res = f.readline()  # 读一行原文件内容
      
                f1.write(res)       # 写一行内容到新文件
相关推荐
铭毅天下几秒前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎
liuyunshengsir7 分钟前
PyTorch 动态量化(Dynamic Quantization)
人工智能·pytorch·python
muddjsv7 分钟前
SQL 最常用技能详解与实战示例
数据库·sql·mysql
电子云与长程纠缠16 分钟前
UE5制作六边形包裹球体效果
开发语言·python·ue5
砍材农夫22 分钟前
物联网 基于netty构建mqtt协议规范(遗嘱与保留消息)
java·开发语言·物联网·netty
DFT计算杂谈25 分钟前
KPROJ编译教程
java·前端·python·算法·conda
froginwe1139 分钟前
Python3 迭代器与生成器
开发语言
xiaoshuaishuai81 小时前
C# 签名异常与Gas预估失败调试方案
开发语言·网络·tcp/ip·c#
xiaoshuaishuai81 小时前
C# Gemini 辅助网络安全漏洞分析
开发语言·web安全·c#
念恒123061 小时前
Python(循环中断)
开发语言·python