阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Python 对文件的IO操作

374次阅读
没有评论

共计 2910 个字符,预计需要花费 8 分钟才能阅读完成。

一、读操作

1、读文件

  • 过程

    a、找到文件

    b、打开文件

    c、读取文件的内容

    d、关闭文件

  • 找到文件

    绝对路径:从根目录开始链接的路径

    相对路径:不是从根目录开始链接的路径

    path = r"file.txt"
  • 打开文件

    • 原型

      def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
    • 参数

      file:要打开的文件的路径

      mode:打开方式

      encoding:编码格式

      errors:错误处理方式(ignore 表示直接忽略)

    • 返回值

      文件描述符,从当前的位置操作当前打开的文件

    • 打开方式

      方式 说明
      r 以只读的方式打开文件,文件的引用 (描述符) 将会被放在文件开头
      rb 以二进制格式打开只读文件,文件的引用 (描述符) 将会被放在文件开头
      r+ 以读写的方式打开文件,文件的引用 (描述符) 将会被放在文件开头
      w 以只写的方式打开文件,如果该文件存在,则将其内容覆盖,如果文件不存在则会创建该文件
      wb 以二进制格式打开只写文件,如果该文件存在,则将其内容覆盖,如果文件不存在则会创建该文件
      w+ 以读写的方式打开文件,如果该文件存在,则将其内容覆盖,如果文件不存在则会创建该文件
      a 打开一个文件用于追加内容,如果该文件存在,文件描述符会被放到文件的末尾,如果文件不存在则会创建该文件
      a+ 打开一个文件用于读写,如果该文件存在,文件描述符会被放到文件的末尾,如果文件不存在则会创建该文件
    • 打开

      打开普通文件

      fp = open(path, "r")

      打开二进制文件

      fp = open(path, "rb")

      指定编码格式

      fp = open(path, "r", encoding="utf-8")

      指定错误处理方式

      fp = open(path, "r", encoding="utf-8", errors="ignore")
  • 读取文件的内容

    • 读取文件的全部内容

      str1 = fp.read() print(str1)
    • 读取指定字节数的内容

      str2 = fp.read(4) print(str2)
    • 读取整行内容(包括 \n 字符)

      str3 = fp.readline() print("*"+str3+"*")
    • 读取指定字节数内容

      str4 = fp.readline(13) print("*"+str4+"*")
    • 读取所有行并返回一个列表,列表中的元素是每行内容

      list5 = fp.readlines() print(list5)
  • 修改文件描述符的位置

    str6 = fp.read(4) print("*"+str6+"*") str7 = fp.read(4) print("*"+str7+"*") # 修改文件描述符的位置 fp.seek(1) str8 = fp.read(4) print("*"+str8+"*")
  • 关闭文件

    • 注意

      文件使用过后必须关闭

    • 原因

      释放资源,系统能打开的文件个数是有限制的,所以需要释放相应文件的文件描述符

    • 关闭方式

      程序结束自动关闭:程序结束时会释放文件对象的空间,文件会关闭,但是不建议这样来做,最好手动关闭

      手动关闭:调用代码关闭

    • 示例

      fp.close()

2、读文件完整过程

try: fp = open("file.txt", "r") print(fp.read()) finally: if fp: fp.close()

3、读文件简写方式

with open("file.txt", "r") as fp: print(fp.read())

二、写操作

1、写文件

  • 过程

    • 找到文件
    • 打开文件
    • 将内容写入缓冲区,此时内容没有写入文件
    • 刷新缓冲区,直接把缓存区中的数据立刻写入文件
    • 关闭文件
  • 刷新缓冲区方式

    • 程序结束
    • 关闭文件
    • 手动刷新
    • 缓冲区满了
    • 遇到 \n
  • 找打文件

    path = "file.txt"
  • 打开文件

    fp = open(path, "w")
  • 将内容写入缓冲区

    fp.write("sunck good")
  • 手动刷新缓冲区

    fp.flush()
  • 关闭文件

    fp.close()

2、写文件完整过程

try: fp = open("file.txt", "w") fp.write("cool man") finally: if fp: fp.close()

3、写文件简写方式

with open("file.txt", "w") as fp: fp.write("cool man")

三、编码与解码

1、编码

with open("file.txt", "wb") as fp: s = "sunck is a good man 凯" s = s.encode("utf-8") fp.write(s)

2、解码

with open("file.txt", "rb") as fp: s = fp.read() s = s.decode("utf-8") print(s)

3、chardet 模块

  • 作用

    使用 chardet 检测编码,支持检测中文、日文、韩文等多种语言

  • 安装

    pip install chardet

  • 使用

    import chardet # 注意:数据量小,猜测的不准 data = "凯哥是一个好男人".encode("gbk") # print(data) ret = chardet.detect(data) print(ret, type(ret)) ''' encoding:表示编码格式 confidence:表示检测的正确的概率 language:表示数据的语言 ''' '''GBK 是 GB2312 的超集,两者是同一种编码''' info = data.decode(ret["encoding"]) print(info)

四、特殊的读写

1、list、tuple、dict、set 的文件操作

  • pickle 模块

    持久化保存对象,将 list、tuple、dict、set 等数据序列化存储到文件

    import pickle
  • 存储

    user = {"account": "sunck", "passwd": "666"} with open("file.txt", "wb") as fp: pickle.dump(user, fp)
  • 读取

    with open("file.txt", "rb") as fp: user = pickle.load(fp) print(user, type(user))

2、StringIO

  • 作用

    数据的读写不一定都是文件,也可以是内存中读写,StringIO 可以在内存中读写字符串

  • 导入

    from io import StringIO
  • fp = StringIO() fp.write("sunck is\n") fp.write("a good") fp.write("man!") # 获取写入的内容 print(fp.getvalue())
  • fp.seek(0) print(fp.read()) fp.seek(0) print(fp.readline()) fp.seek(0) print(fp.readlines())

注意:文件使用后关闭文件

3、BytesIO

  • 作用

    数据的读写不一定都是文件,也可以是内存中读写,StringIO 只能操作字符串,BytesIO 可以操作二进制数据

  • 使用

    from io import BytesIO fp2 = BytesIO() fp2.write("sunck is a nice man".encode("utf-8")) fp2.seek(0) print(fp2.read().decode("utf-8")) fp2.close()

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计2910字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7799048
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...