来说道说道与文件相关的一些操作
一、文件的介绍
1、什么是文件 狭义说:文本文件;广义说:超文本文件, 图片,声音,超链接,视频。
2、文件的分类 文件大体上可以分为两类,文件文件和二进制文件。
3、文件的作用 使用文件的目的是把一些数据存储存放起来。 4、使用文件的流程 我们操作一个文件的流程一般是 打开文件,读写文件,关闭文件。通过程序操作文件 的流程也是这三步,首先打开文件,然后读写文件,最后关闭文件。
二、读写文件的简单操作
1.读取文件
#read读取
file=open("将进酒", mode='r')#打开文件夹中的文件 第一个参数是文件的路径,第二个参数 mode=访问文件的模型,r 表示读,默认也是r 模式
ret=file.read()#读取文件中的所以内容
print(ret)
file.close()#关闭
2.写文件
file=open("./b.txt",mode="w")#打开文件
ret=file.write("hahahahah")#写文件内容
file.close()#关闭文件
注:如果文件不存在,会自动创建文件(不会创建目录)
三、文件权限
- 读取操作
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开 头。一般用于非文本文件如图片等。 注意:二进制文件把内容表示为一个特殊的bytes字符串类型。
r+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开 头。一般用于非文本文件如图片等。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开 头。一般用于非文本文件如图片等。 - 写操作
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头 开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文 件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在, 创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开 始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文 件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在, 创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件 的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文 件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针 将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之 后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件 的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件 用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针 将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
四、文件操作
1.读操作
(1)read
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,会导致程序卡 死,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字符的内容。
file=open("将进酒", mode='r')
ret=file.readline()#每次读取三个字符
print(ret)
file.close()
(2)readline
readline每次读取一行,并且自带换行功能 每一行末尾会读到\n
file=open("将进酒", mode='r')
ret=file.readline()
print(len(ret))#末尾有一个换行符\n
print(ret)
print(file.readline())
print(file.readline(3))#读取指定个字符
file.close()
(3)readlines()
Readlines,一次性以行的形式读取文件的所有内容并返回一个list,需要去遍历读出来
file=open("将进酒", mode='r')
ret=file.readlines()
for i in ret:#遍历读取出来
print(i)
file.close()
(4)循环读取
file句柄是一个可迭代的对象因此,可以循环读取文件中的内容,每次读一行。
#循环读,每次读一行
file=open('将进酒')
for i in file:
print(i)
2.写操作
(1) .write()
file=open("./蜀道难.txt",mode="w")
ret=file.write("""
蜀道难
=*=*=*=*=*==**=*=*=**=*=*=*=*=*=*==*
唐·李白
噫吁嚱,危乎高哉!蜀道之难,难于上青天!
蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。
上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。
问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜。
连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!
剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。
朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!
""")
file.close()
(2) .writelines() file.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。
file=open("./b.txt",mode="w")
list=['aa\n','bb','cc']
file.writelines(lst)
file.close()
3、其他操作
(1).tell() tell获取文件当中当前光标所在的位置
(2) .seek() seek():移动文件读取指针(光标)到指定位置
seek()的三种模式:
-f.seek(x,0) 第二个参数0 表示绝对位置(文件的开头位置),第一个参数x表示文件开头的第几个字节位置 开始读取内容。
- f.seek(-1,1)第二个参数1表示相对位置(光标当前位置),第一个参数X表示移动几个字节开始读取。 注意:如果是操作文本x只能是0 ,如果是以二进制模式操作 x可以是其他内容。
- f.seek(x,2) 2表示光标在文件的末尾,x表示从文件末尾开始移动几个位置后开始读 取,注意: 如果是文本只能是0,如果是二进制模式,x可以是其他内容
#tell告诉光标位置
file=open("将进酒",mode="r")
ret=file.read(3)
pos=file.tell()
print(ret)
print(pos)
file.close()
#seek 移动文件读取指针光标到指定位置
file=open("将进酒",mode="r")
file.seek(3,0)
pos=file.tell()
print(pos)
file.close()
(4) .name和mode
file.name 返回 路径
file.mode 返回 文件读写模式
五、with方法
使用with方式操作文件,可以不用关闭文件,会自动关闭文件
with open('梦游天姥吟留别') as file:
ret=file.read()
print(ret)
六、乱码
python读写文件时,默认使用的编码为平台编码,也就是gbk。 在pycharm中创建的文件默认使用的是utf-8编码。
- 往pycharm中的k.txt中保存内容。 乱码
with open('file/le.txt',mode='w') as f:
f.write("哈哈哈哈哈哈哈哈哈哈哈")
2.向磁盘中的文件保存内容,不乱码。
with open('c:/work/le.txt',mode='w') as f:
f.write("哈哈哈哈哈哈哈哈哈哈哈")
- 指定编码
with open('c:/work/le.txt',mode='w',encoding='utf-8') as f:
f.write("哈哈哈哈哈哈哈哈哈哈哈")
七、文件其他操作
使用os模块对文件进行一些相关操作
1.重命名文件
2.删除文件
3.创建目录 mkdir()
生成的是单层目录
4.创建多级目录
5. 删除目录 删除一层空目录。
6.删除多级目录 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推。
如果上一层目录不为空则停止删除文件。如果file04不为空则报错。
7.获取当前所在目录 getcwd()
8.获取目录列表
9. 切换所在目录 chdir() 改变当前脚本工作目录
10.判断文件或文件夹是否存在 os.path.exits(path)
11.判断是否为文件
12.判断是否为目录
13. 获取绝对路径
14. 判断是否为绝对路径
15. 获 取路径中的最后部分
16. 获取路径中的路径部分 获取父目录部分。(不管最后是文件还是文件夹)
17. 将多个目录组织成路径返回
18.获取文件信息
1.getatime()返回path所指向的文件或者目录的最后访问时间 2.getctime()查看文件创建时间
3.getmtime()返回path所指向的文件或者目录的最后修改时间 4.getsize()查看文件的大小