1,文件的操作:我们使用open( )来函数来打开一个文件获取到文件句柄,同过句柄就可以进行各种操作了,根据打开的方式不同,执行的操作也不同.
1>只读(r )
列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")................f....在这里我们是获取到要读文件的句柄,open是打开文件,第一个引号是要打开的文件名称,mode.是用什么方式打开,encoding是编码集根据文件的实际保存编码进行获取数据(utf-8)
content = f.read()......................................................................把执行读的这个文件赋值给content
print(content).........................................................................获取要读文件的内容
f.close().................................................................................再把源文件关闭
1.1>只读(rb)在rb模式下读取出来的数据是bytes类型,应为是bytes,所以没必要在进行encoding.
列如:f = open("护⼠士少妇嫩模",mode="rb").............................同理这里把encoding="utf-8"去掉了
content = f.read()
print(content)......................................................此时打印的内容是:b'\xe6\xaf\x85\xe5\x93\xa5, \xe5\xa4\xaa\xe7\x99\xbd, wuse\n\xe5\x91 \xb5\xe5\x91\xb5\n\xe6\x97\xa5\xe5\xa4\xa9'是一个将字符串经过utf-8编码的bytes
f.close()
rb的作用是在我们读取非文本的时候比如:图像,视频等信息时,就要用到rb,这种数据没办法直接显示,文件的上传下载还会用到
2,绝对路径和相对路径
2.1>绝对路径:从磁盘根目录开始一直到文件名
2.2>相对路径:同一个文件下的文件,相当于当前文件夹而言,如果在同一个文件夹下,则相对路径就是这个文件名,如果在上一层则要../
推荐使用相对路径
1.2>只读(r,rb)格式: .read( )括号中也可以添加内容,内容的单位是字符 .read(n)就是读取n个字符,如果再读,就会从当前位置继续去读,不是从头读.
列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")
content = f.read(3)......................................................默认光标在开始的位置,开始读3个字符,从光标当前位置向后读3个字符
print(content)..............................................................此时打印结果是:雨一直
f.close()......................................................................关闭源文件
.....#............rb模式和这个一样,只不过读出来是字节
1.3> .readline( )一次读取一行,readline()每次读出来的数据都会有\n,所以我们要用 .strip()来去掉\n或者空格
列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")
content = f.readline()...........................................当括号里边什么都不加时默认读第一行,当括号里加数字时,就是读几个字符和 .read(n)一样
print(content).......................................................此时打印结果是:雨一直下,气氛不算融洽
f.close()................................................................关闭源文件
##....在这里每一行都当做是一个元素,放到一个列表中.( .readlines())
1.4>循环读取,这样就避免一次一次去把每一行敲出来,节省重复性工作,且每次读取一行,也避免了内存奔溃.
列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")
for line in f:...........................................................把句柄中的每一行拿出来,放到line中
print(line.strip()).........................................拿出来以后因为每一行有一个换行,打印的时候有一个默认的换行所以打印出来有2次换行,因 此需要删除一个换行
f.close()
3,写读模式(w,wb):致谢的文件,如果没有则会创建一个文件,如果已经存在了文件,就会将源文件中的内容删除再,冲新输入新的内容.
列如:f = open("天龙八部",mode= "w",encoding= "utf-8")...........当没有"天龙八部"这个文件时,就创建一个新的文件
content = f.write("乔峰").....................................................在"天龙八部"的文件里先清空,在写入"乔峰"
f.flush()...............................................................................刷新,养成好习惯(当数据量庞大的时候把数据搞笑的传输过去)
f.close()...............................................................................关闭源文件
print(content)..................................................................此时打印的结果是:2(表示写入的是2个字符)是看不见"乔峰"的
f = open("天龙八部",mode= "w")............................................(w b)形式
content = f.write("马尔扎哈".encode("utf-8"))..........................写入的字符串必须要转化为bytes(字节的形式)
f.flush()
f.close()
print(contenr).......................................................................此时打印的是:12(4个字符,12个字节)
4,追加(a ab):在追加的模式下,我们写入的内容会追加到文件的结尾.
列如:f = open("天龙八部",mode= "a",encoding= "utf-8").................是在以有文件里增加内容
content = f.write("阿紫")..........................................................在原文件的末尾增加"阿紫"
f.flush().................................................................................刷新
f.close()..................................................................................关闭原文件
print(content)...........................................................................此时打印的结果是:2(表示写入的是2个字符)也是看不见的
5,读写模式(r+,r+b)对于读写必须是先读,光标默认是从头开始的,当读完了之后再写入.
列如:f = open("天龙八部",mode= "r+",encoding= "utf-8")..........................打开文件是读写模式
content= f.read().................................................................................先读文件当括号里加上数字,就读出几个字符
f.write("刺激战场").............................................................................在文件的末尾增加"刺激战场"(##在读取n后,写入也是在末尾添加)
f.flush()
f.close()
print(content)...................................................................................此时打印的结果是:张无忌马尔扎哈("刺激战场"是看不到的,因为没有读)
f.write("刺激战场")..........................................................................先写再度就会在文件的开始覆盖相应的字符
content = f.read()..........................................................................再读就是读光标之后的字符,当括号里有数时就读几个字符
f.flush()
f.close()
print(content)...............................................................................此时打印的是:尔扎哈
###...................在r+模式下必须是先读取再写入
6,其他相关操作: .seek()光标移动位置.
1> .seek(n)光标移动到n的位置,这里光标移动的单位是byte,所以如果是utf-8的中文部分是3的倍数.
seek(0)是表示光标在开头
seek(0,2)表示光标从开头移动到结尾.......0表示光标移动到开头,1表示移动到当前位置,2表示光标移动到结尾.
列如:f = open("天龙八部",mode= "r+",encoding= "utf-8")
f.seek(3)...............................................................................先把光标从当前位置移动3个字节(必须是3的倍数,否则报错)
content = f.read.(3)...............................................................文件从当前光标向后读3个字符
f.flush
f.close
print(content)......................................................................此时打印结果是:无忌玛(光标先移动3个字节,再读取3个字符)
7,文件修改:将文件中的内容读取到内存上,然后把源文件删除,再把内存里读取到的内容存储到一个新的文件中,在将新的文件命名为原文件的名字(掩耳盗铃)文件名字一样但是文件内容是不一样的,完成文件的修改.
格式:import os...................................................................................................调用函数
with open("a.txt",mode = "r+",encoding = "utf-8") as f1,\............................通过"r+"的模式打开文件"a.txt"用f1作为句柄
open("a.txt_副本",node = "r+", encoding="utf-8") as f2:....................同时过"r+"的模式打开另一个文件"a.txt_副本"用f2作为句柄(前提是 a.txt_副本这个文件存在)
for line in f1:.........................................................................................把句柄f1的文件每一行作为元素遍历出来
new_line = line.replace("3","9")...................................................把遍历出来的每一行中的"3"换成"9"
f2.write(new_line).........................................................................把改变以后每一行新的元素放在心打开的文件f2中
os.remove("a.txt")........................................................................................把原文件删除
os.rename("a.txt_副本","a.txt")....................................................................把打开的新文件命名成原文件名
#......................1>先打开2个文件
# /.....................2>把要修改的文件遍历出来
#........................3>修改遍历出来的文件并赋值给新的变量
#......................4>把修改好的元素写到新文件中
#.....................5>把原文件删除,在命名新文件位原文件名字