Python读写文件

最近得以空闲,然后继续学习py。


学习一下py中最频繁用到的文件读写的方法。

在py中,操作是通过文件对象【File obj】实现的,通过文件对象可以读写文本文件和一些二进制文件。

1.打开文件

使用Python中的open函数。有8个参数,但是我们常用的就2个足够了。

# 使用所有参数打开文件
with open('example.txt', mode='r', buffering=1, encoding='utf-8', errors='ignore', newline='\n', closefd=True, opener=None) as f:# 读取文件内容content = f.read()print(content)
  • file参数
    如果是字符串,则代表的是文件名字,文件名字可以是相对当前目录的路径,也可以是绝对路径;如果是一个整数,则代表文件描述符,文件描述符指向一个打开的文件。
  • mode参数

下面是常用的文件打开模式:

  1. 只读模式 (r)

    • 描述:以只读模式打开文件。文件指针将会放在文件的开头。如果文件不存在,会抛出 FileNotFoundError 异常。
    • 示例open('filename.txt', 'r')
  2. 写入模式 (w)

    • 描述:以写入模式打开文件。文件指针会放在文件的开头。如果文件不存在,会创建一个新文件。如果文件存在,会截断文件(即清空文件内容)。
    • 示例open('filename.txt', 'w')
  3. 追加模式 (a)

    • 描述:以追加模式打开文件。文件指针会放在文件的末尾。如果文件不存在,会创建一个新文件。如果文件存在,写入的数据将会追加到文件的末尾。
    • 示例open('filename.txt', 'a')
  4. 读写模式 (r+)

    • 描述:以读写模式打开文件。文件指针会放在文件的开头。如果文件不存在,会抛出 FileNotFoundError 异常。
    • 示例open('filename.txt', 'r+')
  5. 写入读模式 (w+)

    • 描述:以写入读模式打开文件。文件指针会放在文件的开头。如果文件不存在,会创建一个新文件。如果文件存在,会截断文件。
    • 示例open('filename.txt', 'w+')
  6. 追加读模式 (a+)

    • 描述:以追加读模式打开文件。文件指针会放在文件的末尾。如果文件不存在,会创建一个新文件。如果文件存在,写入的数据将会追加到文件的末尾。可以进行读写操作。
    • 示例open('filename.txt', 'a+')
  7. 二进制模式 (b)

    • 描述:以二进制模式打开文件。可以与上述模式组合使用,例如 rbwbabr+b 等。用于读取或写入二进制文件,如图片、音频等。
    • 示例open('filename.bin', 'rb')
  8. 文本模式 (t)

    • 描述:以文本模式打开文件。默认模式,可以与上述模式组合使用,例如 rtwtatr+t 等。用于读取或写入文本文件。
    • 示例open('filename.txt', 'rt')

示例代码

以下是一些打开文件的示例代码:

# 以只读模式打开文本文件
with open('example.txt', 'r', encoding='utf-8') as f:content = f.read()# 以写入模式打开文本文件
with open('example.txt', 'w', encoding='utf-8') as f:f.write("Hello, World!")# 以追加模式打开文本文件
with open('example.txt', 'a', encoding='utf-8') as f:f.write("Appending some text.")# 以二进制模式打开文件
with open('example.bin', 'rb') as f:binary_content = f.read()# 以读写模式打开文件
with open('example.txt', 'r+', encoding='utf-8') as f:f.write("Read and write.")f.seek(0)content = f.read()

2.关闭文件

当使用了open打开文件之后,要记得写关闭文件,否则会抛异常。

常规就是调用一次open,然后尾部写一下close。

但是一般情况下,文件的操作往往会抛出异常,为了保证文件的操作无论正常结束还是异常结束都能够关闭文件,使用with as 代码块来进行自动资源管理。

import unittestclass MyTestCase(unittest.TestCase):def test_something(self):# self.assertEqual(True, False)  # add assertion here# print("hello world")fobj = open("test.txt", "w+",encoding="utf-8")fobj.write("hello world")fobj.close()with open("test.txt", "a+",encoding="utf-8") as f:f.write("\n大家好~")if __name__ == '__main__':unittest.main()

这样子执行的话,就是创建了一个文件,往里面写入了一句话。

注意

  • 文件有编码的,需要指定
  • 用完要关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.5.25.python.exercise

# # 导入数据处理的包 # # from pyecharts.charts import Line # # from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts, LabelOpts # # import json # # # # # 打开文件 # # file_us open("美国.txt", "r", encoding&quo…

C++ Primer Plus第十八章复习题

1、使用用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar。 class z200 { private:int j;char ch;double z; public:Z200(int jv,char chv,zv) : j(jv), ch (chv), z(zv){} };double x 8.8; std::string s "what a bracing effect ! …

头歌OpenGauss数据库-H.存储过程第1关:创建存储过程

编程要求 数据库中已经存在三个基础表: student ( num integer, name char(20), age integer, level integer, dept char(20) ); course ( id integer, name char(20) ); sel_course ( studentid integer, courseid integer, score integer ); 创建存储过程&#xf…

Vue3/Vite引入EasyPlayer.js播放H265视频错误的问题

一、引入EasyPlayer.js github链接:GitHub - EasyDarwin/EasyPlayer.js: EasyPlayer.js H5播放器 将demo/html目录下的 EasyPlayer-element.min.js、EasyPlayer-lib.min.js、EasyPlayer.wasm、jquery.min.js 复制到vue3工程的public目录下,注意,vue3 vite的index.html文件…

win10配置wsl的深度学习环境

# 1、一步完成wsl:开启虚拟机、linux子系统、并下载ubuntu # 官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打开windows terminal,选ubuntu交互环境 # 第一次需要配置用户名和密码 # 接下来正常使用即可# 3、cud…

自然资源-做好用地用海国土空间规划符合性审查

自然资源-做好用地用海国土空间规划符合性审查 为发挥国土空间规划战略引领和刚性管控作用,强化国土空间规划对各专项规划的指导约束作用,依法依规加强自然资源要素保障,做好用地用海用岛国土空间规划符合性审查工作: 一、加快地…

深入了解数据库设计中的规范化与反规范化

目录 零、前言 一、一些基本术语 二、关系模式 2.1. 什么是关系模式 2.2. 示例 三、数据依赖 3.1. 函数依赖 3.1.1. 完全函数依赖 3.1.2. 部分函数依赖 3.1.3. 传递函数依赖 3.2. 多值依赖 3.3. 连接依赖 四、规范化 4.1. 第一范式(1NF) …

什么是 DNS 转发?

DNS转发是一种网络传输技术,主要用于解决本地DNS服务器无法直接解析某个特定域名的情况。当本地DNS服务器收到一个无法解析的域名请求时,它会将该请求转发给其他可信的DNS服务器,以获取所需的解析结果。这种技术有助于优化网络性能和安全性&a…

【Flutter】有状态组件StatefulWidgetScaffold组件属性

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Flutter学习 🌠 首发时间:2024年5月26日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 目…

AWS联网和内容分发之VPC

Amazon Virtual Private Cloud(VPC)是一项用于在AWS云中创建一个逻辑隔离的虚拟网络的服务,使用户能够在云中启动AWS资源(例如EC2实例),并将其放置在自己定义的虚拟网络中。 Amazon VPC让您能够全面地控制…

AEE运行机制深入剖析——阅读笔记

AEE运行机制深入剖析——阅读笔记 在移动设备和嵌入式系统的开发中,应用执行环境(Application Execution Environment,简称AEE)起着至关重要的作用。AEE是操作系统层面的一个框架,负责管理应用程序的生命周期&#xf…

JVM性能调优:内存模型及垃圾收集算法

JVM内存结构 根据Java虚拟机规范,JVM内存主要划分为以下区域: 年轻代(New Generation) 包括Eden空间,用于存放新创建的对象。Survivor区由两个相同大小的Survivor1和Survivor2组成,用于存放经过初次垃圾回…

AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇)

上一篇介绍了Agent与LangGraph的基础技能Tool的必知必会 AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会 前面已经详细介绍了Promp、RAG,终于来到Agent系列(别急后面还有LangGraph),大家可以先看下这张图&#xff1…

leetcode328. 奇偶链表,附详细解析和代码注释

leetcode328. 奇偶链表 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意&#xff0…

Java的反射机制详解:动态操作类和对象

Java反射是一种强大的机制,允许程序在运行时查询和操作类、方法、接口等。这种能力使得Java应用可以在运行时动态地创建对象、调用方法和访问属性,极大地提升了程序的灵活性和可扩展性。本文将深入探讨Java反射的原理、核心API和实际应用场景&#xff0c…

Flutter 中的 CupertinoSlidingSegmentedControl 小部件:全面指南

Flutter 中的 CupertinoSlidingSegmentedControl 小部件:全面指南 在Flutter框架中,CupertinoSlidingSegmentedControl是一个用于创建类似iOS风格的滑动分段控制器的小部件。这种控制器通常用于允许用户在不同的视图或设置之间切换。本文将为您提供一个…

轻量级 K8S 环境 安装minikube

文章目录 操作系统DockerDocker CE 镜像源站使用官方安装脚本自动安装 (仅适用于公网环境)安装校验Docker代理docker permission denied while trying to connect to the Docker daemon socket minikubekubectl工具minikube dashboard参考资料 操作系统 …

Docker进入容器查看内容并从容器里拷贝文件到宿主机

工作中需要从docker正在运行的镜像中复制文件到宿主机,于是便将这个过程记录了下来。 (1)查看正在运行的容器 通过以下命令,可以查看正在运行的容器: docker ps (2)进入某个容器执行脚本 我…

前端人员选择组件封装

功能&#xff1a; 人员选择&#xff0c;返回人员参数&#xff0c;以及人员参数id数组支持单选&#xff0c;多选人员支持重新选择回显上次选中人员 <!-- 弹窗 --><a-modal v-model"modalVisible" :footer"null" :bodyStyle"{ padding: 0 }&q…

react中子传父信息

思路是&#xff1a; 在父组件定义一个函数接受参数&#xff0c;接收的参数用于接收子组件的信息&#xff0c;把函数传给子组件&#xff0c;子组件调用父亲传来的函数并把要告诉父亲的话传到函数中&#xff0c;就实现了子传父消息 import { useState } from reactimport { use…