目录
前言
一、open()函数
1.只读模式 r
2.只写模式 w
3.追加模式 a
二、操作其他文件
1.Python 操作二进制
2.Python 操作 json 文件
三、关闭文件
四、上下文管理器
五、文件指针位置
在实际操作中,通常需要将数据写入到本地文件或者从本地文件中读取数据等操作,那么作为 Python 爱好者的我们,必须掌握用 Python 语言去对本地文件进行操作。
本地文件操作步骤:
file:打开的文件位置(路径) mode:指定操作文件的权限(默认只读权限) encoding:指定编码utf-8,解决中文乱码的问题
方法 | 描述 |
---|---|
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模式,当文件不存在时则报错
- 读取不可逆
方法 | 描述 |
---|---|
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模式,当文件不存在时创建文件
- 再次写入时为覆盖
注意:
- a模式,当文件不存在时创建文件
- 再次写入为追加
在 Python 中,使用 wb 模式,写入二进制数据。
方法 | 描述 |
---|---|
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())
运行结果: