文件就是数据持久化存储在磁盘上的一种形式,常见的文件如mp3、mp4、html、py、png、jpg等等
想一想,我们在电脑上面一般是如何操作文件的呢?
第一步:打开文件
第二步:编辑保存文件
第三步:关闭文件
用Python来操作文件流程大致与上列步骤一致。
在Python中使用open函数打开文件,具体操作如下
file = open('文件路径','文件的打开模式')
# 示例 :打开c盘下面的1.txt文件用于写入数据
file = open('c:/1.txt','w')
open函数返回的结果可以用于对改文件进行后续的操作,比如写入数据,关闭文件等等。文件的打开模式有以下类型:
总结个规律:
带r的都需要操作文件必须存在,带b的是用二进制方式处理,带+号的都是读写权限,r是读文件必须在,w是写文件在就原文件重写,没有就新建,a是追加写内容,抓住重点随意组合。
关于文件路径:
1、相对路径
相对路径既相对于当前操作的文件的位置
2、绝对路径
绝对路径就是针对系统的盘符的根路径的位置
../ : 表示上一级目录
./ :表示当前目录
文件写入使用
wirte函数
# 使用相对路径打开文件,并赋予追加写入权限
file = open('file/1.txt','w+')
# 在文件1.txt中写入数据
file.wirte('亲爱的同志们,我爱你们!')
wirtelines函数
new_file = open("file/2.txt","w")
# 一次写一行
new_file.writelines("啦啦啦\n啦咔咔咔")
当结束文件操作后,需要执行关闭文件操作,以释放资源,使用**close()**函数,文件关闭后将不能继续对文件进行读写操作,如果需要读写操作需要重新打开文件。
# 使用相对路径打开文件,并赋予追加写入权限
file = open('file/1.txt','w+')
# 在文件1.txt中写入数据
file.wirte('亲爱的同志们,我爱你们!')
# 关闭文件,结束文件操作
file.close()
read函数
'''
参数:count为缺省参数,不传为读取整个文件,若传递则为需要读取的长度
返回值:读取到的内容
'''
read(count)
# 假设存在文件1.txt
file = open('1.txt','r')
# 读取整个文件
content = file.read()
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这个语句块结束以后,
程序自动帮你关闭
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)
tell函数
'''
获取当前文件中的偏移量
可以使用tell获取文件总的bytes长度
'''
tell()
什么是编码?文件编码就是说当我们处理文件的时候使用什么方式去处理文件。就好比古人不像咱今天这么开放,表达情意传递小纸条都看不见,用火烤一下文字就出现了。
计而算机并不认识中文以及其他国家语言,那么计算机如何读懂人类的语言呢?计算机底层是二进制,如何定义同一个二进制大家表达的是一个意思呢?你说这是鹿,我非要说是马,大家标准不统一就乱套了。于是就有了编码表(其实就跟个字典一样),大家按照统一标准来,所以当我用某一个编码表存储数据的时候,读取的人也使用对应的编码表翻译,这样就能看到正确的信息了。
with open("file/1.txt", "r", encoding="gbk") as f:
f.read()
os 模块为Python标准库
import os
# 显示当前文件路径
print(os.getcwd())
# 显示当前目录下的所有文件名称,并存储到列表中
print(os.listdir())
for file in os.listdir():
print(file)
# 改变文件工作路径
# os.chdir()
# 创建文件夹
# os.mkdir("file/test")
# 删除文件夹
# os.rmdir("file/test")
# 删除文件
# os.remove("file/1.txt")
# 重命名文件
# os.rename("file/2.txt","老王.txt")
# 运行系统层面的指令
# os.system("linux指令")
# 拼接两个路径
path = os.path.join("http://www.baidu.com","?wd=老王")
print(path)
# 文件目录与父级目录
par_path = os.path.dirname("/06 文件操作/老王.txt")
print(par_path)
# 文件绝对路径
print(os.path.abspath("老王.txt"))
# 文件相对路径
print(os.path.realpath("老王.txt"))
# 获取文件大小
size = os.path.getsize("老王.txt")
print(size)
# 判断路劲是否存在
bool = os.path.exists("file1")
print(bool)
# 判断是否是文件夹
# os.path.isdir()
# # 判断是不是文件
# os.path.isfile()
# # 判断文件是否为绝对路径
# os.path.isabs()
# 创建时间
os.path.getctime()
# 访问时间
os.path.getatime()
# 修改时间
os.path.getmtime()