1.前言

在Python中,对文件的操作主要遵循以下流程:

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过文件句柄对文件进行操作
  3. 关闭文件

2.打开文件

使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。

语法:

open(文件名及路径,打开模式,编码方式)

如:

# 以只读模式,并以utf-8编码方式打开当前目录下的hello.txt文件,将文件句柄赋值给变量f
f = open('./hello.txt','r',encoding='utf-8')

打开文件的内部过程如下:

  1. 由应用程序向操作系统发起系统调用open(...)
  2. 操作系统打开该文件,并返回一个文件句柄给应用程序
  3. 应用程序将文件句柄赋值给变量f

Python中的文件打开模式有以下几种:

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

3.关闭文件

打开一个文件操作结束后切记关闭文件。

# 关闭文件
f.close()

4.读文件

4.1 read(num)

使用read(num)可以从文件中读取数据,num表示要从文件中读取的字符数,如果没有传入num,那么就表示读取文件中所有的数据。

注意:每读取一点数据,光标就会移动到被读取数据的末尾,当下一次读取时,会从上一次读取的末尾继续读取。当不传入num读取文件中所有的数据时,光标会移动到文件的末尾。

例如有hello.txt文件,其内容为:

Hello World

使用read()读取:

f = open('hello.txt', 'r', encoding='utf-8')
print(f.read(1)) # 输出 H
print(f.read(1)) # 输出 e
print(f.read(1)) # 输出 l
print(f.read()) # 输出 lo World
print(f.read(1)) # 此时光标已经移动到文件末尾,所以这次读取内容为空
f.close()

4.2 readline()

readline()读取是以行为单位读取,一次读取一行内容,光标会移动到第二行首部。

例如有hello.txt文件,其内容为:

Hello World1
Hello World2
Hello World3
Hello World4

使用readline()读取:

f = open('hello.txt', 'r', encoding='utf-8')
# 使用readline()读取
print(f.readline()) # 输出 Hello World1
print(f.readline()) # 输出 Hello World2
f.close()

4.3 readlines()

readlines()可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

例如有hello.txt文件,其内容为:

Hello World1
Hello World2
Hello World3
Hello World4

使用readline()读取:

f = open('hello.txt', 'r', encoding='utf-8')
# 使用readlines()读取
print(f.readlines()) # 输出['Hello World1\n', 'Hello World2\n', 'Hello World3\n', 'Hello World4\n']
f.close()

5.写文件

当向文件内写入内容时,open()函数的文件访问模式必须为w写入模式,如果写入的文件不存在,则系统会自动创建该文件并写入;如果写入的文件已经存在并且文件内有内容,则新写入的内容会覆盖原有内容。

5.1 write()

write()方法用于向文件中写入指定字符串。

使用write()方法向hello.txt文件中写入数据:

f = open('hello.txt', 'w', encoding='utf-8')
# 使用write()写入
f.write('你好,世界')
f.close()

5.2 writelines()

writelines()`方法用于向文件中以行为单位批量写入,方法中传入列表作为参数,列表的每个元素为要写入的一行数据。

f = open('hello.txt', 'w', encoding='utf-8')
# 使用writelines()写入
f.writelines(['你好,世界1\n', '你好,世界2\n'])
f.close()

5.3 追加写入

上面使用w模式写入文件时,如果源文件内已有内容,则会覆盖原有内容,如果在写入新数据时不想覆盖原有内容并且在原有内容后面追加,则需要以a追加模式打开文件。

hello.txt原有内容为:

Hello World1
Hello World2
Hello World3
Hello World4

以追加模式向其写入新内容:

# 文件追加写入
f = open('hello.txt', 'a', encoding='utf-8')
f.writelines(['你好,世界1\n', '你好,世界2\n'])
f.close()

写入后hello.txt内容为:

Hello World1
Hello World2
Hello World3
Hello World4
你好,世界1
你好,世界2

6.b模式操作文件

b模式,即以二进制方式读写文件。我们知道,不是所有的文件都可以以文本方式读写,例如图片,视频等文件就必须以二进制的方式来处理。

这里,我们可以模拟一下图片复制的过程:

1.以二进制方式读取源图片文件;

2.创建一个跟源文件格式相同的目标文件;

3.将读取的源图片文件数据再以二进制方式写入新创建的目标文件中;

代码如下:

# 以二进制读取rb方式打开源图片文件
src_f = open('1.png', 'rb')
# 读出源图片文件数据,存储为img_data
img_data = src_f.read()
# 关闭源图片文件
src_f.close() # 以二进制写入wb方式打开目标图片文件
dst_f = open('2.png', 'wb')
# 将读取的源图片文件数据写入目标文件
dst_f.write(img_data)
# 关闭目标文件
dst_f.close()

7.with操作符

打开一个文件切记操作完毕后手动关闭文件,有时候为了快速并且防止忘记关闭文件我们常常采用with操作符来打开处理文件,用with操作符处理文件,处理完毕后不需要我们手动关闭 文件,系统会帮我们自动关闭文件。

语法:

with open(...) as f:
'具体操作'

注意

f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

python学习之【第十一篇】:Python中的文件操作的更多相关文章

  1. Python学习【第十一篇】模块(1)

    模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保 ...

  2. python学习【第十一篇】网络编程

    一.socket的简介 socket(简称:套接字)进程间通信的一种方式,它与其他进程间通信的一个主要不同是:能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通 ...

  3. python学习(二十一) Python 中的链式赋值

    Python的链式赋值如下:

  4. Python 学习笔记(十一)Python语句(二)

    For 循环语句 基础知识 for循环可以遍历任何序列的项目,如一个列表或者一个字符串. 语法: for 循环规则: do sth >>> for i in "python ...

  5. Python 学习笔记(十一)Python语句(三)

    While 循环语句 用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务. 语法: while 判断条件: 执行语句…… 执行语句可以是单个语句或语句块.判断条件可以是任何 ...

  6. Python 学习笔记(十一)Python语句(一)

    运算符和条件语句 算术运算符 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘 ...

  7. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

  8. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  9. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  10. openresty 学习笔记番外篇:python的一些扩展库

    openresty 学习笔记番外篇:python的一些扩展库 要写一个可以使用的python程序还需要比如日志输出,读取配置文件,作为守护进程运行等 读取配置文件 使用自带的ConfigParser模 ...

随机推荐

  1. httprouter框架 (Gin使用的路由框架)

    之前在Gin中已经说到, Gin比Martini的效率高好多耶, 究其原因是因为使用了httprouter这个路由框架, httprouter的git地址是: httprouter源码. 今天稍微看了 ...

  2. js完整

    jQuery jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行 ...

  3. 二次函数,为什么a>0就可以知道开口向上.

    最近自考. 学习高等数学. 学习高等数学过程中发现高中数学不会,,于是乎开始补高中数学. 学习高中数学过程中又发现初中数学有的不会,,于是乎开始补初中数学.. 可怕(→_→). 今天遇到一个二次函数, ...

  4. 机器学习中梯度下降法原理及用其解决线性回归问题的C语言实现

    本文讲梯度下降(Gradient Descent)前先看看利用梯度下降法进行监督学习(例如分类.回归等)的一般步骤: 1, 定义损失函数(Loss Function) 2, 信息流forward pr ...

  5. ANC主动降噪理论

    根据系统是否有参考信号传感器可将ANC系统大致的分为前馈型和反馈型. 前馈控制是产生次级噪声之前就通过传感器测量初级噪声的频率以获取参考信号. 反馈控制不需要测得参考信号就产生次级噪声进行相消干涉 反 ...

  6. vue图片点击放大预览

    第一种:viewerjs使用介绍(PC.移动端都兼容) 1.先安装依赖 npm install v-viewer --save 2.main.js内引用并注册调用 //main.js import V ...

  7. 2019关于phpstudy软件后门简单分析

    2019.9.20得知非官网的一些下载站中的phpstudy版本存在后门文件   说是官网下的就没有后门 20号出现的新闻 今天phpstudy官网21号又更新一波 不太好说这是什么操作哦 此地无银三 ...

  8. php 安装vld扩展

    下载地址 : http://pecl.php.net/package/vld 此处包是 : vld-0.14.0.tgz 1. tar -xvf  vld-0.14.0.tgz  -C  INSTAL ...

  9. table表格中文字超出显示省略号

    第一步: table {table-layout:fixed:}列宽由表格宽度和列宽度设定,不随文字多少变化 第二步: td { white-space:nowrap;/*文本不会换行,文本会在在同一 ...

  10. Pycharm 常用快捷键大全

    Pycharm 常用快捷键 常用快捷键 快捷键 功能 Ctrl + Q 快速查看文档 Ctrl + F1 显示错误描述或警告信息 Ctrl + / 行注释(可选中多行) Ctrl + Alt + L ...