python基础——文件操作【文件编码、文件的打开与关闭操作、文件读写操作】

📝前言:
这篇文章主要讲解一下python中对于文件的基础操作:
1,文件编码
2,文件的打开与关闭操作
3,文件读写操作

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础以及python入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:无问东西


文章目录

  • 一,文件编码
  • 二,文件的打开与关闭
    • 1,open()函数
    • 2,打开模式
    • 3,路径的书写
    • 4,文件的关闭
  • 三,文件的读写操作
    • 1,文件的读取
      • (1)read()
      • (2)readline()
      • (3)readlines()
      • (4)for循环读取
    • 2,文件的写入
      • (1)write(content)
      • (2)writelines(lines)
      • (3)文件的追加

一,文件编码

在学习文件操纵前,我们先来了解一下文件编码
什么是文件编码?

文件编码是指在计算机中存储和表示字符串的方法。它涉及字符集中的字符如何转换为二进制数,以及在读取或写入文件时如何将二进制数转换回字符集。
在 Python 中,当你使用 open() 函数打开文件时,可以指定文件的编码方式。常见的编码方式有:

‘utf-8’:这是 Python 的默认编码,可以表示地球上几乎所有的字符。
‘gbk’:这是用于简体中文的编码方式。
‘latin-1’:也称为 ISO-8859-1,可以表示大多数西方语言的字符。
… 等等。

注意:没有特殊情况,我们一般使用UTF-8的格式打开文件,使用不正确的编码可能会导致乱码或无法打开文件的问题。

二,文件的打开与关闭

1,open()函数

我们在对文件进行读写操作前,需要先试用open()函数打开文件
函数原型:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file: 这是一个必须的参数,表示要打开的文件名或文件模式。如果 file 是一个字符串,那么它表示的是要打开的文件名;如果 file 是一个整数,那么它表示的是文件模式。例如,0 表示以读模式打开,1 表示以写模式打开,2 表示以读写模式打开。
mode: 这是一个可选的参数,表示文件模式。默认值为 ‘r’,表示读模式。其他常见的模式还有 ‘w’(写模式)和 ‘a’(追加模式)。
buffering: 这是一个可选的参数,表示缓冲策略。默认值为 -1,表示使用系统默认的缓冲策略。如果设置为 0,则表示无缓冲;如果设置为 1,则表示有缓冲。
encoding: 这是一个可选的参数,表示文件的编码方式。例如,‘utf-8’、‘gbk’ 等。
errors: 这是一个可选的参数,表示在编码或解码时处理错误的方式。例如,‘strict’、‘ignore’、‘replace’ 等。
newline: 这是一个可选的参数,表示在文件中使用的换行符。例如,‘\n’、‘\r\n’ 等。
closefd: 这是一个可选的参数,表示是否在打开文件时关闭文件描述符。默认值为 True。
opener: 这是一个可选的参数,表示用于打开文件的函数。默认值为 None,表示使用内建的 open() 函数。

这个有点复杂了,但其实我们常用到的参数就'file'mode以及encoding,分别是指文件的路径文件的打开方式以及文件的编码方式(一般情况下使用UTF-8

示例一:
(以只读的形式打开一个文件,返回的是一个文件对象):

f = open('file.txt','r',encoding='UTF-8')  #注意:encoding要关键字传参

我们还可以用使用 with 语句打开文件,可以确保文件在操作完成后自动关闭,避免资源泄露。
示例二:

# 以读模式打开文件
with open('file.txt', 'r') as f:content = f.read()# 以写模式打开文件
with open('file.txt', 'w') as f:f.write('Hello, world!')

这个时候文件对象就是as后面的f

2,打开模式

在刚刚的例子中我们提到了’‘r’和’w’:读和写两种打开模式,下面我们将看看其他的模式,并具体介绍一下这些模式:
(此图片来源于知乎,如有侵权,请告知)
注意:
打开的文件不存在,python中的“w”功能就会创建新文件
打开的文件存在,"w"写入会覆盖原有内容(即把原有内容清空了,再写入)

3,路径的书写

斜杠(/)或双反斜杠(\)都可以用来表示路径分隔符。例如:C:\Users\username\Documents
为了确保代码的跨平台兼容性,建议使用斜杠(/)作为路径分隔符,这样可以同时在Windows、Linux和macOS上运行而无需修改。

4,文件的关闭

文件的关闭使用close(),示例:

f.close()

三,文件的读写操作

1,文件的读取

(1)read()

用于读取文件的所有内容,读取的内容以字符串的形式储存并返回
语法:

read(num)

num代表从文件中读取的字符串的长度,单位是字节,如果没有传入参数,则代表读取全部内容
例如:

with open("file.txt", "r") as file:content = file.read()

(注意: 如果有多个read读取,后面的read会从前一个read读取到的末尾开始读)

(2)readline()

用于读取文件中的一行,例如:

with open("file.txt", "r") as file:line = file.readline()

(3)readlines()

读取文件中的所有行(回车符也会被读取),然后每一行为一个元素,以列表的形式储存
例如:

with open("file.txt", "r") as file:lines = file.readlines()

(4)for循环读取

我们还可以用for循环来读取文件的每一行,得到的每一行都是字符串
例如:

with open("file.txt", "r") as file:for line in file:......

总结:
在这里插入图片描述

2,文件的写入

(1)write(content)

这个方法用于将内容写入文件。例如:

with open("file.txt", "w") as file:file.write("Hello, World!")

(2)writelines(lines)

这个方法用于将多行内容写入文件。例如:

with open("file.txt", "w") as file:file.writelines(["Hello", "\n", "World!"])

注意:我们调用上面两种方法写入的时候,内容并不会直接被写入文件里面,内容会被积攒在程序的内存中,即:缓存区
只有当我们调用flush()方法刷新内容的时候,内容才会出现在文件里
示例:

f = open("D:/test.txt", "w", encoding="UTF-8")
# write写入(原内容会被覆盖)
f.write("Hello World!")
# flush刷新
f.flush()

注意:close()方法自带flush()功能

(3)文件的追加

"a"模式:写入内容的时候,是在原来内容的后面追加
追加写入的函数和"w"一样,只是打开模式不同
示例:

f = open("D:/test.txt", "a", encoding="UTF-8")
# write写入(原内容不会被覆盖)
f.write("Hello World!")
# flush刷新
f.flush()

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

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

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

相关文章

04 | Swoole 源码分析之 epoll 多路复用模块

首发原文链接:Swoole 源码分析之 epoll 多路复用模块 大家好,我是码农先森。 引言 在传统的IO模型中,每个IO操作都需要创建一个单独的线程或进程来处理,这样的操作会导致系统资源的大量消耗和管理开销。 而IO多路复用技术通过…

OceanBase OBCA 数据库认证专员考证视频

培训概述 OceanBase 认证是 OceanBase 官方推出的唯一人才能力认证体系,代表了阿里巴巴及蚂蚁集团官方对考生关于 OceanBase 技术能力的认可,旨在帮助考生更好地学习 OceanBase 数据库产品,早日融入 OceanBase 技术生态体系,通过由…

MYSQL——索引概念索引结构

索引 索引是帮助数据库高效获取数据的排好序的数据结构。 有无索引时,查询的区别 主要区别在于查询速度和系统资源的消耗。 查询速度: 在没有索引的情况下,数据库需要对表中的所有记录进行扫描,以找到符合查询条件的记录&#…

Doris实践——票务平台的实时数仓建设

目录 前言 一、引入 Doris原因 二、基于Doris搭建数据平台 2.1 构建实时数仓 2.2 Flink CDC全库同步 三、基于Doris进行OLAP报表开发 四、未来规划 原文大佬介绍的这篇票务平台的实时数仓建设有借鉴意义,现摘抄下来用作沉淀学习。如有侵权,请告知…

web前端面试题----->VUE

Vue的数据双向绑定是通过Vue的响应式系统实现的。具体原理: 1. Vue会在初始化时对数据对象进行遍历,使用Object.defineProperty方法将每个属性转化为getter、setter。这样在访问或修改数据时,Vue能够监听到数据的变化。 2. 当数据发生变化时…

Java学习31-Java 多线程Thread 线程的创建

多线程的概念: 用户想要一边听歌,一边QQ聊天,一边游戏。要求能并发执行。 program程序: 有特殊功能的一组代码process进程: 正在执行中的program,或者程序program的一次执行过程thread线程:程…

CSS实现元素边框渐变动画

前言: 边框流动动画是一种非常常见的效果,能够让网页看起来更加生动有趣。通过使用 CSS3,我们可以轻松地实现这种动画效果。本文将介绍如何使用 CSS3 实现边框流动效果,下面一起来看看吧。 示例图:边框是动画持续变化的…

前端简历:大学还没毕业,就写2年工作经验,上的啥大学呢?

我看过很多前端简历,不知道是不是被所谓简历专家和面试专家给拐带的,还没毕业就敢写2年工作经验,如果属实,大学上了个啥? 简历每天都能收到几十上百封,对于初级人才招聘,基本上看以下几点。 1、…

CIM搭建实现发送消息的效果

目录 背景过程1、下载代码2、进行配置3、直接启动项目4、打开管理界面5、启动web客户端实例项目6、发送消息 项目使用总结 背景 公司项目有许多需要发送即时消息的场景,之前一直采用的是传统的websocket连接,它会存在掉线严重,不可重连&…

深入理解数据结构(3):栈和队列详解

文章主题:顺序表和链表详解🌱所属专栏:深入理解数据结构📘作者简介:更新有关深入理解数据结构知识的博主一枚,记录分享自己对数据结构的深入解读。😄个人主页:[₽]的个人主页&#x…

瑞吉外卖实战学习--7、员工信息分页查询

员工信息分页查询 前言1、配置公共分页组件2、创建接口并查看接收的参数3、使用分页构造器并添加查询条件和排序条件4、测试结果 前言 1、配置公共分页组件 package com.example.ruiji_demo.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;…

sharemore少数派提示词或许需要工程,但提问一定需要智慧

Matrix 首页推荐 Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 文章代表作者个人观点,少数派仅对标题和排版略作…

代码随想录算法训练营第二十五天| 216.组合总和III,17.电话号码的字母组合

题目与题解 216.组合总和III 题目链接:216.组合总和III 代码随想录题解:216.组合总和III 视频讲解:和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili 解题思路&#xf…

数据结构和算法:图

图 图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。可以将图 𝐺 抽象地表示为一组顶点 𝑉 和一组边 𝐸 的集合。 如果将顶点看作节点&#…

9.2-源码分析:Dubbo Remoting 层 Buffer 缓冲区

Buffer 是一种字节容器,在 Netty 等 NIO 框架中都有类似的设计,例如,Java NIO 中的ByteBuffer、Netty4 中的 ByteBuf。Dubbo 抽象出了 ChannelBuffer 接口对底层 NIO 框架中的 Buffer 设计进行统一,其子类如下图所示: …

Oracle数据库——子查询五

14.1子查询语法 子查询 (内查询) 在主查询之前一次执行完成。子查询的结果被主查询(外查询)使用 。范例一:谁的工资比 Abel 高? 第一:查询Abel的工资是多少。第二:比较大于这个工资的人数。 注意事项: 子查询要包含在括号内。将子查询放在比较条件的右侧。</

文件名目录名或卷标语法不正确:数据恢复策略与预防措施

一、文件名目录名或卷标语法不正确的现象 在日常使用电脑或移动设备时&#xff0c;我们经常会遇到“文件名目录名或卷标语法不正确”的错误提示。这种错误通常发生在尝试访问、修改或删除文件、目录或卷标时&#xff0c;系统会提示无法完成操作&#xff0c;因为文件名、目录名…

C++格式化输入和输出

格式化输入与输出 除了条件状态外&#xff0c;每个iostream对象还维护一个格式状态来控制IO如何格式化的细节。 格式状态控制格式化的某些方面&#xff0c;如整型值是几进制、浮点值的精度、一个输出元素的宽度等。 标准库定义了一组操纵符来修改流的格式状态。 一个操纵符…

电商系列之商详

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

java解数独(力扣Leetcode37)

数独问题 力扣原题链接 问题描述 数独的解法需遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 数独部分空格内已填入了数字&#xff0c;空白格用.表示。 示例 示例&…