1、文件操作步骤

当我们要读取或者写入文件时,我们需要打开文件,在操作完毕时,我们需要关闭文件,以便释放和文件操作相关的系统资源。因此,文件操作的主要包括以下:

  1. 打开文件。
  2. 读写等操作。
  3. 关闭文件。

注意:可以只打开和关闭文件,不进行任何读写操作。

2、文件的读写操作

(1)文件的打开

在Python中,使用open( )函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

# 文档中语法如下
open(file, mode='r', buffering=-1, encoding_=None, errors=None, newline=None, closefd=True, opener=None) # 我们可以看到这个open( )函数有很多的参数
# 但是我们也可以看到处了第一个参数,其他的都是关键字参数
# 也就是说,除了第一个必填,其他的都可以不填写。
# 但是我们在实际开发中,比较常用的就是前两个选项。 open(name, mode)
  • name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
  • mode:设置打开文件的模式(访问模式),只读、写入、追加等。

(2)打开文件模式

在Python中,文件的打开模式如下表:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头(相当于光标所在的位置)。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。(文件指针在开头,覆盖文件)
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。(文件指针在内容的结尾处,方便追加内容)
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

说明:

  • 主要的三种打开模式为rwa

    • 凡事带+都是可读可写模式。
    • 凡事带b的都是以二进制格式打开文件。
    • 所有的访问模式的基础特点都要遵循三种猪访问模式rwa
  • x 模式

    x 模式用来新建文件,如果文件不存在则创建,存在则报错。

    如果想创建一个文件,不想覆盖已有的文件,就可以选择这个操作文件的方式。
  • bt
    • t是以纯文本方式打开文件,默认就是t
    • b是以二进制方式打开文件。

关于打开文件模式的官方文档,在[The Python Standard Library] —> [Built-in Functions] —> 内置方法列表中选择[open()]

文档内容如下图所示:

(3)获取一个文件对象

也就是打开一个文件。

# open()函数返回一个对象,这个对象就代表了当前打开的文件。
# file_obj是一个文件对象,文件打开状态
file_name= 'test.txt'
file_obj = open(file_name, 'r') # <class '_io.TextIOWrapper'>
print(type(file_obj))
# <_io.TextIOWrapper name='test.txt' mode='r' encoding='cp936'>
print(file_obj)

注意:此时的file_objopen( )函数返回的文件对象。

只要没有报错,就证明文件打开了。

当我们获取了文件对象以后,所有的对文件的操作都应该通过对象来进行。

(4)关于文件路径

  • 如果目标文件和当前文件在同一级目录下,则直接使用文件名即可。
  • 可以使用..来返回一级目录,也就是上一级目录。
  • 在windows系统使用路径时,可以使用/来代替\,在Python中会自动转换,

    或者可以使用 \\ 来代替 \

    或者也可以使用原始字符串,如file_name = r'hello\demo.txt'

    也就是在字符串前面加上一个小写的r,是字符串原样输出,不加任何转义。
  • 如果目标文件距离当前文件比较远,此时可以使用绝对路径。

    绝对路径应该从磁盘的根目录开始书写,如file_name = r'C:\Users\123\Desktop\hello.txt'

『无为则无心』Python基础 — 41、Python中文件的读写操作(一)的更多相关文章

  1. 『无为则无心』Python基础 — 3、搭建Python开发环境

    目录 1.Python开发环境介绍 2.Python解释器的分类 3.下载Python解释器 4.安装Python解释器 5.Python解释器验证 1.Python开发环境介绍 所谓"工欲 ...

  2. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

  3. 『无为则无心』Python基础 — 6、Python的注释

    目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...

  4. 『无为则无心』Python基础 — 7、Python的变量

    目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...

  5. 『无为则无心』Python基础 — 10、Python字符串的格式化输出

    目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...

  6. 『无为则无心』Python基础 — 12、Python运算符详细介绍

    目录 1.表达式介绍 2.运算符 (1)运算符的分类 (2)算数运算符 (3)赋值运算符 (4)复合赋值运算符 (5)比较运算符 3.逻辑运算符 拓展1:数字之间的逻辑运算 拓展2:Python中逻辑 ...

  7. 『无为则无心』Python基础 — 44、对文件和文件夹的操作

    目录 1.os模块介绍 2.查看os模块相关文档 3.os模块常用方法 (1)文件重命名 (2)删除文件 (3)创建文件夹 (4)删除文件夹 (5)获取当前目录 (6)改变默认目录 (7)获取目录列表 ...

  8. 『无为则无心』Python序列 — 18、Python列表概念及常用操作API

    目录 1.列表的概念 (1)列表的定义 (2)列表的应用场景 (3)列表的定义格式 2.列表的常用操作 (1)列表的查找 1)通过下标查找 2)通过方法查找 3)判断是否存在 (2)列表的增加 @1. ...

  9. 『无为则无心』Python序列 — 24、Python序列的推导式

    目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...

随机推荐

  1. c++内存分布之纯虚函数

    关于 本文演示环境:VS2017+32位程序. 纯虚函数是一种特殊的虚函数.可以预测到:虚函数的结论同样适用纯虚函数,但是纯虚函数是一种特殊的存在,还是看看实际结果. 代码写的不够规范: 因为任何带虚 ...

  2. 【LeetCode】212. Word Search II 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 前缀树 日期 题目地址:https://leetco ...

  3. 【LeetCode】520. Detect Capital 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 循环判断三个条件 大写字母个数和位置判断 根据首字符 ...

  4. 【LeetCode】695. Max Area of Island 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 日期 题目地址:ht ...

  5. 【剑指Offer】二叉搜索树与双向链表 解题报告(Python)

    [剑指Offer]二叉搜索树与双向链表 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  6. idea使用教程-常用设置

    [1]进入设置: [2]设置主题: [3]编辑区的字体变大或者变小: [4]鼠标悬浮在代码上有提示: [5]自动导包和优化多余的包: 手动导包:快捷键:alt+enter 自动导包和优化多余的包: [ ...

  7. ZooKeeper基础知识总结

    数据模型 ZooKeeper数据模型是一个树状的数据结构,类似于文件系统:和文件系统的区别在于树中的每一个节点(叶子节点与非叶子节点)都可以保存数据,且每个节点的访问都必须从根节点开始,以斜线作为分隔 ...

  8. 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...

  9. .NET5.0 依赖注入,关于 Autofac 使用

    前置 工具 VS2019 概念 关于以下几个概念,自行百度. 控制反转:IoC(Inversion of Control) 依赖注入: 容器:DI 容器(.NET Core 自带),Autofac(本 ...

  10. 使用.NET 6开发TodoList应用(17)——实现数据塑形

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在查询的场景中,还有一类需求不是很常见,就是在前端请求中指定返回的字段,所以关于搜索的最后一个主题我们就来演示一下关于数据塑形 ...