Python --- 文件操作
目录
前言
一、open()函数
1.只读模式 r
2.只写模式 w
3.追加模式 a
1.Python 操作二进制
2.Python 操作 json 文件
三、关闭文件
四、上下文管理器
五、文件指针位置
前言
在实际操作中,通常需要将数据写入到本地文件或者从本地文件中读取数据等操作,那么作为 Python 爱好者的我们,必须掌握用 Python 语言去对本地文件进行操作。
本地文件操作步骤:
- 找到文件所在位置
- 打开文件
- 操作文件
- 关闭文件
一、open()函数
file:打开的文件位置(路径) mode:指定操作文件的权限(默认只读权限) encoding:指定编码utf-8,解决中文乱码的问题
1.只读模式 r
方法 | 描述 |
---|---|
f.readable() | 判断是否可读 |
f.read(n) |
读取全部,在python中n为字符 n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。 |
f.readline() | 逐行读取,包括\\n |
f.readines | 读取所有,返回值为列表,包括\\n |
data.txt
hello
world
cheng xu yuan
(1)f.readable()
判断是否可读,返回布尔值
f = open('data.txt', mode='r', encoding='utf-8')
if f.readable():print('可读')
else:print('不可读')
运行结果:
(2)f.read(n)
这里n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。
if f.readable(): f = open('data.txt', mode='r', encoding='utf-8')print(f.read(8))
运行结果:
(3)f.readline()
从文件中读取一行内容,换行符是‘\\n’,重复输入此命令是从下一行开始读取。
if f.readable():f = open('data.txt', mode='r', encoding='utf-8')print(f.readline(), end='')print(f.readline(), end='')
运行结果:
仔细观察我们可以发现,打印一次f.readline(),它只输出一行,并且指针移到了下一行开头。最后一行输出的是空字符,说明指针到了文件结尾,并且不会自动回到开头。
每输出一行内容,它会自动输出一个\\n。我们可以再后面加上end=’’,意思就是它默认的结尾是‘\\n’,我们把它改成空字符。
(4)f.readlines()
将文件中每一行作为一个元素,保存在一个列表中,返回的值就是这个列表。它会将文件中的全部内容一次性读入列表,有一个好处就是取用内容十分方便。
if f.readable():f = open('data.txt', mode='r', encoding='utf-8')print(f.readlines())
运行结果:
注意:
- r模式,当文件不存在时则报错
- 读取不可逆
2.只写模式 w
方法 | 描述 |
---|---|
f.writable() | 判断是否可写 |
f.write(str) | 写入内容,返回值为写入字符串的长度 |
f.writelines(seq) | 写入多行,但需要自己添加换行符 |
(1)f.write(str)
用于将字符串或者byte类型的数据写入文件。该命令可以多次重复,但只是在计算机内存中操作,只有关闭了文件(with语句中不需要)才会保存到硬盘中。
with open('data.txt',mode='w',encoding='utf-8') as file:f = (file.write('很美'))print(type(f),f,sep='\\n')with open('data.txt',mode='r',encoding='utf-8') as file:print(file.read())
运行结果:
注意:
- w模式,当文件不存在时创建文件
- 再次写入时为覆盖
3.追加模式 a
注意:
- a模式,当文件不存在时创建文件
- 再次写入为追加
二、操作其他文件
1.Python 操作二进制
在 Python 中,使用 wb 模式,写入二进制数据。
2.Python 操作 json 文件
方法 | 描述 |
---|---|
json.loads() | json 转为 字典(适用于语句) |
json.dumps() | 字典转为 json (适用于语句) |
json.load() | json 转为字典(适用于文件) |
json.dump() | 字典转为json(使用于文件) |
三、关闭文件
需要注意的是,当文件打开之后,必须通过 f.close() 语句来关闭文件,释放资源。
四、上下文管理器
with 关键字用于 Python 的上下文管理器机制。为了防止诸如 open 这一类文件打开方法在 操作过程出现异常或错误,或者最后忘了执行 close 方法,文件非正常关闭等可能导致文件泄 露、破坏的问题 。Python 提供了 with 这个上下文管理器机制,保证文件会被正常关闭。在 它的管理下,不需要再写 close 语句。其余操作都同 open() 一致。
f = open('data.txt', 'w')
f.write("cheng xu")
f.close() # 关闭文件
使用上下文管理器:
with open('data.txt', 'w') as f:f.write("cheng xu")
五、文件指针位置
在文件读写的操作过程中,我们发现文件的指针是会根据我们的打开方式、以及读写命令的执行,有一个固定的位置,这样使用起来不能够随心所欲,那么我们就需要能够自己掌握指针的位置。
方法 | 描述 |
---|---|
f.tell() | 文件所处位置 |
f.seek(offset,whence) |
1.tell()
返回文件读写指针当前所在的位置,这个位置是从文件开头算起的 字节数 ,而不是字符数。
with open('data.txt',mode='w',encoding='utf-8') as file:file.write('你好')print(file.tell())file.write('呀')print(file.tell())
运行结果:
从这里我们也可以发现:汉字占用三个字节。
2.f.seek(offset,whence)
用于指定指针的位置。它有两个参数,先介绍第二个参数whence,它有三个固定的选项,分别是0、1、2
0 | 从文件首开始偏移 |
1 | 从当前所在位置开始偏移 |
2 | 从文件末尾开始偏移 |
第一个参数是偏移量,就是需要从所选位置移动偏移的字节数,很容易理解。请看示例:(在‘你好’中间插入字符‘们’)
with open('data.txt',mode='r+',encoding='utf-8') as file:file.write('你好')file.seek(0, 0)print(file.read())file.seek(3, 0)old=file.read()file.seek(3, 0)file.write('们')file.write(old)file.seek(0, 0)print(file.read())
运行结果: