文件操作
什么是文件?
文件就是数据持久化存储在磁盘上的一种形式,常见的文件如音频(mp3)、视频(mp4)、网页(html)、Python文件(py)、图片(png)、图片(jpg)、文本(txt)等等。
想一想,我们在电脑上面一般是如何操作文件的呢?
第一步:打开文件
第二步:编辑保存文件
第三步:关闭文件
用 Python 来操作文件流程大致与上列步骤一致。
打开文件
在 Python 中使用 open 函数打开文件,具体操作如下:
open(参数1,参数2)
open函数就是在本地打开一个文件
参数1 选择文件的路径
参数2 打开文件的方式
file = open('文件路径','文件的打开模式')
# 示例 :打开c盘下面的1.txt文件用于写入数据
file = open('c:/1.txt','w')
# 写入权限
file.write("我是世界上最美丽的人!")
# 关闭文件
file.close()
open 函数返回的结果可以用于对改文件进行后续的操作,比如写入数据,关闭文件等等。
文件的打开模式有以下类型:
关于文件路径
相对路径: 以当前操作的文件为起点,去寻找文件
./ 上一级目录
../ 上上一级目录
绝对路径: 以计算机盘符为起点
总结个规律:
-
带 r 的都需要操作文件必须存在;
-
带 b 的是用二进制方式处理;
-
带 + 号的都有读写权限;
-
r 是read 只读,文件必须在;
-
w 是white 只写,文件在就原文件重写,没有就新建;
-
a 是追加写内容,抓住重点随意组合;
随意组合中 1 凡是含有r这个文件都必须存在,如果不存在程序报错 2 凡是含有w,如果文件存在就覆盖原来的内容,文件不存在就创建新文件 文件操作的注意事项: 非纯文本都是用二进制的方式处理操作 json txt csv
写入数据
文件写入使用
write 函数
# 使用相对路径打开文件,并赋予追加写入权限
file = open('file/1.txt','w+')
# 在文件1.txt中写入数据
file.wirte('亲爱的同志们,我爱你们!')
writelines函数
new_file = open("file/2.txt","w")
# 一次写一行
new_file.writelines("啦啦啦\n啦咔咔咔")
关闭文件
当结束文件操作后,需要执行关闭文件操作,以释放资源,使用 close( ) 函数,文件关闭后将不能继续对文件进行读写操作,如果需要读写操作,则需要重新打开文件。
# 使用相对路径打开文件,并赋予追加写入权限
file = open('file/1.txt','w+')
# 在文件1.txt中写入数据
file.wirte('亲爱的同志们,我爱你们!')
# 关闭文件,结束文件操作
file.close()
文件读取
存储单位
比特位
字节 0000 0000 8个比特位 --> 255 计算机底层二进制 99999999 11111111(二进制)
KB 1024个字节
MB 1024kb
GB
TB
PB
read函数
语法结构:
'''
file.read(参数) 用于读取文件
参数:count为缺省参数,不传为读取整个文件,若传递则为需要读取的长度,一次性读取文件的大小
返回值:读取到的内容
'''
read(count)
代码示例:
# 假设存在文件1.txt
file = open('1.txt','r')
# 读取整个文件
content = file.read()
# 读取文件 按照字节读完为止
content = file.read(1024)
# 关闭文件
file.close()
readline函数
'''
读取文件的一行数据
返回值:读取到的内容
'''
readline()
readlines函数
'''
读取文件所有行的内容
返回值:读取到的内容,返回的数据类型是列表,每一行数据都是列表中的一个元素
'''
readlines()
案例练习:文件复制
"""
文件说明:用Python实现文件复制
1 打开源文件,权限为读 r
2 开始读取源文件内容
3 创建新文件
4 将读取到的内容写入新文件
5 关闭新老文件
"""
# 获取老文件名称
old_file_name = input("请输入你想要复制的文件名称:")
# 打开文件
old_file = open(old_file_name,"r")
# 开始读取文件
content = old_file.read()
# 找到文件后缀名.的下标
index = old_file_name.rfind(".")
# 字符串切片方式提取数据
new_file_name = old_file_name[:index] + "[副本]" + old_file_name[index:]
# 创建新文件,写入权限
new_file = open(new_file_name,"w")
# 写入数据
new_file.write(content)
# 关闭新老文件
new_file.close()
old_file.close()
with open as
? 通过上面的案例我们发现,每次打开一个文件结束操作的时候,必须要将这个文件关闭,相对来说比较繁琐,有时候还很容易忘记,我们可以使用with open as,这样操作文件的时候就可以不用手动关闭文件,程序在结束文件操作后会自动关闭文件。
"""
with open as 方法不需要手动关闭文件,当你的with open as这个语句块结束以后,
程序自动帮你关闭
flush 方法 : 刷新缓存
"""
with open("file/1.txt","r") as new_file:
content = new_file.read()
# 强制刷新缓存,保障数据全部写出,一般情况下,文件关闭后程序会自动刷新到磁盘中.
# 使用flush方法,在文件关闭之前,确保数据写出了.
new_file.flush()
print(content)
文件偏移(文件的定位读取)
seek 函数
'''
参数2表示从文件的哪个位置开始算,0表示从文件开头,1表示从当前位置,2表示从文件末尾
参数1表示从参数2的位置开始,往后偏移多少个字节
'''
seek(参数1,参数2)
参数1:偏移量
参数2:方向
0 从文件开头处理
1 表示从当前游标位置开始
2 表示从文件末尾开始
tell函数
'''
获取当前文件中的偏移量,可以记录游标的位置
可以使用tell获取文件总的bytes长度
'''
tell()
结合运用
# 打开文件
file = open("file/test.txt","r")
# 读取文件 读取一个字节
file.read(1)
file.seek(2,0) # 从开头开始算,偏移两个字节
num = file.tell() # 记录游标,返回游标的位置
file.seek(num,1) # 从游标的位置开始读取文件
file.close()