一、文件的操作
1、文件初识
(1)文件路径:绝对路径和相对路径
1)绝对路径:从根目录开始找文件
2)相对路径:从当前的文件夹下找文件
(2)编码方式
(3)操作方式:只读,只写,读写,写读,追加等
(4)文件句柄:在python代码中,变量名通常为:f,f_obj,f_handler,f_h,fh等
(5)open() :python中的内置函数,内部调用的是windows的系统命令
2、对文件的操作
1)打开文件,获取文件句柄
2)读文件句柄进行操作(read() ,write() 等)
3)关闭文件句柄(close())
open() 默认打开模式是“r” 所以可以不写
3、打开方式
读:r rb r+ r+b
r:只读(默认的打开方式,mode可以省略不写。文件必须存在且编码必须是和指定的编码方式一样,否则报错)
read() 把文件中的内容全部读取出来,注意读取出来的内容是字符串,sprit() 去除空格,换行符、制表符等
read(n) 按照指定读取字符数(换行符也属于一个字符)
readline() 读取一行
readlines() 把文件中的每一行读取出来变成列表
使用for循环,文件句柄是一个可迭代的对象。该方法较好,每次读取一行之后在内存中就删除,不占用内存,记得去换行符
如下:在d/data/content.txt
filepath = r"d:\data\contact.txt"f = open(filepath,encoding="utf-8")content = f.read() #全部读取print(content) f.close()
content = f.read(3)print(content) f.close()
content = f.readline()print(content) f.close()
content = f.readlines()print(content) f.close()
for line in f: print(line.strip()) f.close()
rb:有b的时候是不需要指定编码方式的,因为是按照bytes来进行的,如果是操作非文本的文件时就需要加上b
如:风景图.jpg
filepath = r"d:\风景照.jpg"f = open(filepath,mode="rb")content = f.read() #读取出来的是 b"\xxx\xxxx"f.close()
r+ :先读后追加
先读后追加是追加在最后面,如果不读直接写,指针从开始的位置移动覆盖掉之前文件中和写入内容同样的内容
r+b :是以bytes类型操作读写
写:w wb w+ w+b
w:只写,不可读,文件不存在,先创建文件然后写入内容,文件存在,把文件中之前的内容清空然后把写入的内容写进去
f_handler = open(“文件1.txt”,encoding= "utf-8",mode="w")f_handler.write("这是一个文件")f_handler.close()
wb:可用来操作bytes类型的数据
w+:写读
w+b:是以bytes类型操作写读
追加:a ab a+ a+b
a:没有文件创建文件,然后写入内容,注意a是不可读的,和w有区别,a不会清空内容再添加,是直接在后面添加
ab:可用来操作bytes
a+ 写读a+b 操作bytes
文件的其他操作方法:
readable() 判断是否是可读模式
writeable() 判断是否是可写模式
seek() 移动指针的位置 移动指针的位置是按照字节数来的
seek(0) 把指针移动到最开始的位置 seek(0,2) 把指针移动到最后
tell() 获取指针的位置
truncate() 要在有写的模式下才可以操作,在“r+”模式下是对源文件进行操作,只在"w"的模式下对源文件清空内容了。
4、文件操作的另一种方式
with open([文件路径],encoding="utf-8",mode="r") as f_read,open([文件路径],encoding="utf-8",mode="w") as f_write: content = f_read.read() f_write.write(content)
优点:
(1)上述方式不用手动关闭文件句柄,会在一定时间之类关闭
(2)可以同时开启多个句柄
5、文件的修改
1)以读的方式打开原文件,产生一个句柄
2)以写的方式创建一个新文件,产生一个句柄
3)循环原文件,修改原文件,然后写入新文件
4)删除原文件 引入模块 os os.remove(src)
5)重命名新文件为原文件 os.rename(src,dic)
例题:
有如下文件:
-------
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
----------
将文件中所有的alex都替换成大写的SB。
#for 循环# f_read = open("文件操作4.txt",encoding="utf-8")# f_write = open("文件操作4副本.txt",encoding="utf-8",mode="w")# for line in f_read:# line = line.replace("wusir","alex")# f_write.write(line)# f_read.close()# f_write.close()# os.remove("文件操作4.txt")# os.rename("文件操作4副本.txt","文件操作4.txt")# with open("文件操作4.txt",encoding="utf-8") as f_read,\# open("文件操作4副本.txt",encoding="utf-8",mode="w") as f_write:# for line in f_read:# line = line.replace("alex","wusir")# f_write.write(line)# os.remove("文件操作4.txt")# os.rename("文件操作4副本.txt","文件操作4.txt")