Python--文件的基本操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env python # -*- coding: utf-8 -*- # ******************************一:文件的操作****************************** # 1. 打开文件,得到文件句柄并赋值给一个变量 # 2. 通过句柄对文件进行操作 # 3. 关闭文件 # 注意:open()一个文件也就是创建了一个对象,把这个对象赋值给变量f,这样变量f文件之间就建立了引用关系 # f = open("a.txt","r") #打开文件,得到文件句柄并赋值给一个变量;文件路径可以是绝对路径也可以是相对路径 # data = f.read() #通过句柄对文件进行操作 # f.close() #关闭文件 # ******************************二:文件的打开方式****************************** # 1.文件的打开方式(默认为文本模式t): # r 以读模式打开文件 # w 以写模式打开文件;如果文件存在,则清空文件,再写入新内容;如果文件不存在则创建文件 # a 以追加模式打开文件(打开文件后,文件光标自动跳转到文件末尾),如果文件不存在则创建文件;注意追加模式下只能进行写操作 # f1 = open("f1.txt","r") #文件不存在则报错 # f1.close() # f2 = open("f2.txt","w") #文件不存在则创建 # f2.close() # f3 = open("f3.txt","a") #文件不存在则创建 # f3.close() # 2.非文本文件打开方式:只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的 # 字符编码、图片文件的jgp格式、视频文件的avi格式) # 注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 # b 以二进制模式打开文件,而不是以文本模式 # f = open("a.txt","rb") # data = f.read() # f.close() # print(data) # 3.读写模式打开文件: # r+ 以读写方式打开文件,可对文件进行读和写操作 # w+ 清除文件内容,然后以读写方式打开文件 # a+ 以读写方式打开文件,并将文件光标移到到文件末尾 # ******************************三:文件的读和写****************************** # 1.read():读取文件内容,并返回一个字符串 # f = open("a.txt","r",encoding="utf-8") #以指定的编码格式来编码(打开)文件 # data = f.read() #读取所有内容,光标移动到文件末尾 # f.seek(0) #将文件光标移动到开始位置 # data1 = f.read(10) #read(n),n是字符数,可以指定读取多少个字符 # f.close() # print(data,data1) # f1 = open("a.txt","rb") #b模式下读文件;注意:win操作系统下换行符是:\r\n # data2 = f1.read() # f1.close() # print(data2) # print(data2.decode("utf-8")) #b模式下查看文件内容,将字节解码为字符串查看 # 注意:字符串(内存)------编码encode------字节(硬盘) # 字节(硬盘) ------解码decode------字符串(内存) # 2.readable():文件是否是可读的,返回布尔值 # f = open("a.txt","r",encoding="utf-8") # data = f.readable() # f.close() # print(data) # 3.readline():读取一行内容,光标移动到第二行开始 # f = open("a.txt","r",encoding="utf-8") # data = f.readline() #读取一行内容,光标移动到第二行开始 # data1 = f.readline(4) #readline(n),n是字符数,可以指定读取该行多少个字符 # f.close() # print(data) # print(data1) # 4.readlines():读取文件中每一行内容,将结果返回一个列表 # f = open("a.txt","r",encoding="utf-8") # data = f.readlines() # f.close() # print(data) # 5.write():以字符串的形式写入内容;写入内容时不会添加换行符,需要手动添加 # f = open("a.txt","w",encoding="utf-8") # f.write("1111111111\n222\n333\n中国\n") # f.close() # f1=open("b.txt","wb") # #字符串的encode()方法:将字符串编码为字节 # f1.write("1111\n222\n".encode('utf-8')) #b模式中的写,需要指定编码格式,将字符串转换为字节写入;字符串需要手动添加换行符 # #bytes函数:将字符串编码为字节 # f1.write(bytes("11112222\n",encoding ="utf-8")) # f1.close() # 注意:字符串(内存)------编码encode------字节(硬盘) # 字节(硬盘) ------解码decode------字符串(内存) # 6.writeable():文件是否是可写的,返回布尔值 # f = open("a.txt","w",encoding="utf-8") # f.writable() # f.close() # 7.writelines():以列表的形式写入内容;列表元素需要手动添加换行符 # f = open("a.txt","w",encoding="utf-8") # f.writelines(["111\n","中国\n"]) # f.close() # 8.closed():文件是否是关闭的,返回布尔值 # f = open("a.txt","w",encoding="utf-8") # data = f.closed # f.close() # print(data) # ******************************四:文件内光标移动****************************** # 光标移动:文件的读和写操作都会使得光标进行移动,比如你read()完文件后,再次read()会获取不到文件内容,因为文件的光标已经在第一次read()时移动到文件末尾了 # 注意1:除了read(n)方法光标是以字符进行的,其余的文件内光标移动都是以字节为单位如seek,tell,truncate # read(3):文件打开方式为文本模式时,代表读取3个字符;文件打开方式为b模式时,代表读取3个字节 # 注意2:文本文件在不同操作系统中换行符是不一样的,python再次处理时会将不同的换行符转换为\n,使用newline=""可以显示不转换前的换行符; # 在tell()时,换行符\r\n为两个字节 # f = open("test.txt", "r+", encoding="utf-8") # print(f.readlines()) # f1 = open("test.txt", "r+", encoding="utf-8",newline="") # print(f1.readlines()) # 1.tell():查看文件当前光标的位置(以字节为单位) # f = open("a.txt", "r+", encoding="utf-8") # print(f.tell()) # f.readline() # print(f.tell()) # 2.seek():控制光标移动字节数 # seek(a,b) a控制移动的字节数,b = 0(默认为0),表示从文件开头开始计算移动 # b = 1,表示从当前光标开始计算移动,此时a为正数表示向后移动;反之则向前移动 # b = 2,表示从文件末尾开始计算移动 # 注意:只有在b模式下,seek()才可以从后向前开始向前移动 # f = open("test.txt", "rb") # print(f.tell()) # f.readlines() # f.seek(-5,2) # print(f.tell()) # ******************************五:文件的其他注意事项****************************** # 1.文件的打开方式有两种: # (1).将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器) # (2).将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖原来的文件 # 注意:1.以文本模式打开文本文件时,注意要以指定的编码格式来打开文件,该编码格式应该与该文件在内存中加载的编码格式一致 # 注意:2.open()函数会检索当前操作系统的编码方式,而不是文件自身的编码方式;open()打开文件默认是r模式 # 注意:3.读和写文件的内容必须都是字符串 # 2.encoding:取文件打开的编码 # f = open("a.txt","w",encoding="utf-8") # print(f.encoding) # 3.flush():用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区; # 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法; # 即就是更改文件内容后,先关闭文件再重新打开文件文件更改才会看到变换 # f = open("f3.txt","w+",encoding="utf-8") # f.writelines(["我爱你中国\n","66666\n"]) # f.flush() # f.close() # 4.truncate():文件的截断(写模式进行);无n表示从当前位置截断;截断之后后面的所有字节被删除 # f1 = open("a1.txt","r+",encoding="utf-8") # f1.truncate(3) #truncate(n),从文件的首行首字节开始截断n个字节,只要截取部分,其他部分所有字节被删除 # print("a1:",f1.read()) # f1.close() # # f2 = open("a2.txt","r+",encoding="utf-8") # f2.seek(8) # f2.truncate() #截断从开头到当前光标位置的内容 # print("a2:",f2.read()) # f2.close() # 5.with打开文件时,可以不关闭文件 # with open("test.txt","a+",encoding="utf-8") as f: # f.write("world\n") # print(f.read())
为了将来做自己想做的事情努力.......