10.文件读写
大约 4 分钟学习笔记Python基础
文本文件的打开分为两种模式:**文本模式 ** 、二进制模式
通常,对 文本文件 都是以 文本模式 打开。程序读取 和 写入 的都是 字符串 对象。
一、 open 函数
1. open 函数的参数
open
函数的参数:
open(
file,
mode='r',
buffering=-1,
encoding=None,
errors=None,
newline=None,
closefd=True,
)
- 参数
file
- 指定需要打开文件的 路径
- 可以是 相对路径
- 也可以是 绝对路径
- 参数
mode
- 指定文件打开的 模式
r
:只读文本模式打开,默认模式w
:只写文本模式打开a
: 追加文本模式打开
- 默认值为
r
- 指定文件打开的 模式
- 参数
encoding
- 指定读写文本文件时,使用的 字符编解码 方式
- 未指定参数值时,会使用系统缺省字符编码方式(中文 windows 系统上使用的是
cp936
,也就是 GPK 编码
2. 文件读写模式
模式 | 可做操作 | 文件不存在时 | 光标位置 | 是否覆盖 |
---|---|---|---|---|
r | 只读 | 报错 | 起始 | - |
r+ | 可读可写 | 报错 | 起始 | 是 |
w | 只写 | 创建 | 起始 | 是 |
w+ | 可读可写 | 创建 | 起始 | 是 |
a | 只写 | 创建 | 末尾 | - |
a+ | 可读可写 | 创建 | 末尾 | - |
r+
:可读可写- 读取、写入 文件时,需要 文件存在
- 文件写入内容后,立即读取时需要 调整光标位置,否则读取信息为空。
w+
:可读可写- 在文件读取时,默认是 先写后读 ,直接读取文件时系统会默认写入一个 空值 ,覆盖原有的内容,所以读取内容为 空 。
- 文件写入内容后,立即读取时需要 调整光标位置,否则读取信息为空。
a+
:可读可写- 读取文件时,需要 调整光标的位置 ,否则读取信息为空。
3. 文件写入
# 指定编码方式为 utf8
f = open('tmp.txt','w',encoding='utf8')
# write方法会将字符串编码为utf8字节串写入文件
f.write('祝大家好运气')
# 文件操作完毕后, 使用close 方法关闭该文件对象
f.close()
警告
使用 w
或者 w+
模式时,会将文件原有内容 删除 。
4. 读取文件
# 指定编码方式为 gbk,gbk编码兼容gb2312
f = open('tmp.txt','r',encoding='gbk')
# read 方法会在读取文件中的原始字节串后, 根据上面指定的gbk解码为字符串对象返回
content = f.read()
# 文件操作完毕后, 使用close 方法关闭该文件对象
f.close()
# 通过字符串的split方法获取其中用户名部分
name = content.split(':')[0]
print(name)
5. read、readline、readlines 的区别
函数 | 默认读取范围 | 换行符 | 返回结果 |
---|---|---|---|
read | 一次性读取所有内容 | 不读取文章末尾的换行符 | 返回的是整个内容的字符串 |
readline | 一行一行的读取文件内容 | 会读取文章末尾的换行符 | 返回每一行,也是字符串 |
readlines | 一次性读取所有内容 | 会读取文章末尾的换行符 | 返整个内容列表(一行一个元素) |
read()
方法f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") data = f.read() print(type(data)) print(data) f.close()
readline()
方法f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") for i in range(3): data = f.readline().strip() print(data) f.close()
readlines()
方法f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") data = f.readlines() print(type(data)) print(data) f.close()
6. 光标移动( seek()函数)
seek(m, n)
函数m
:开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。- 0 :光标移动到文件 开始位置
- -1 :光标移动到文件 末尾位置
n
:默认为 0 ,不需要写,当写 1 或者 2 时 ,需要在 rb 模式 (二进制模式)下才能生效- 0 :代表从文件开头开始算起
- 1 :代表从当前位置开始算起
- 2 :代表从文件末尾算起。
二、 with 语句
with 语句
:打开文件时,不需要我们调用 close 方法 关闭文件
# open返回的对象 赋值为 变量 f
with open('tmp.txt') as f:
linelist = f.readlines()
for line in linelist:
print(line)
with open
可以同时打开多个文件
with open('d:/200906.txt')as file1,open('d:/200906_1.txt') as file2:
print(file1.read())
print(file2.read())
三、 写入缓冲
f = open('tmp.txt','w',encoding='utf8')
f.write('祝大家好运气')
# 等待 30秒,再close文件
import time
time.sleep(30)
f.close()
代码在未执行 f.close()
语句之前,写入内容是存放在 **缓冲区,在 缓冲区 未堆满或者 未执行 关闭文件 语句之前,写入内容不会写入文件。
如果需要立即写入文件,则需要使用 flush
方法
f = open('tmp.txt','w',encoding='utf8')
f.write('祝大家好运气')
# 立即把内容写到文件里面
f.flush()
# 等待 30秒,再close文件
import time
time.sleep(30)
f.close()