我会把常用的文件所有操作全部讲一遍并且附上代码,里面所使用的全部为相对路径。
1、创建打开文件
file=open('文件.txt','a+') #a+的意思和c语言没区别
2、以二进制打开文件
file=open('图片1.png','rb') #以只读二进制方式打开图片文件 print(file) #通过输出我们可以得出创建的是一个BufferedReader对象,该对象生成后可以再应用其他第三方模块处理
3、打开文件指定编码方式
file=open('文件.txt',encoding='utf-8')
open打开默认使用GBK编码,如果被打开文件不是这个编码就会抛出异常 可以直接先更改文件的编码,或者像我们这样指定编码4、关闭文件
file=open('文件.txt','a+') file.close()
5、打开文件
with open('文件.txt','w')as file: pass
把文件打开后产生的结果保存到file变量中;with的好处是在处理文件的时候无论是否抛出异常,都能保证with语句执行完毕后关闭已经打开的文件 。
6、写入文件内容
file=open('文件.txt','a+') file.write('66666666666666') #使用write的前提是在打开文件的时候模式为可以写入的,a,w,a+都行 file.close()
7、读取文件
with open('文件.txt','r') as file: string=file.read(9) #调用read函数读取前面9个字符,read函数是从文件开始的时候开始读取的 print(string) file.close()
8、seek方法
with open('文件.txt','r') as file: file.seek(8) #移动8位文件指针,相当于已经到了9 string=file.read(10) #从9的位置开始读取 print(string) file.close()
9、实例
with open('古诗.txt','a+',encoding='utf-8') as file: #追加模式打开,以utf-8模式写入 s=input('古诗=') #手动输入数据 file.write(s) #写入文件 file.seek(0) #重置文件指针的位置,因为当写入完文件后,文件的指针依旧偏移到了数据的末尾 string=file.read() #读取文件全部的数据 print(string) #打印 file.close() #关闭文件对象 #值得一提的是read()方法只能从文件开始的位置读取,也只能使用r或者r+,一定要使用a+就需要先重置文件指针位置
10、按照一行读取
with open('古诗.txt','r',encoding='utf-8') as file: #打开模式必须是r或者r+ s=file.readline() print(s) file.close()
11、读取全部行
#读取全部行的作用同调用read()放大时不指定size类似,只不过读取全部行的时候,返回的是一个字符串列表 #每个元素为文件的一行内容。读取全部行,使用的是文件对象的readiness()方法 with open('古诗.txt','r',encoding='utf-8') as file: string=file.readlines() #读取全部行,放入字符串列表 print(string) file.seek(0) #记得需要重置文件指针 string=file.read() #用read()读取全部内容 print(string) file.close()
12、目录操作
import os print(os.name)#nt表示Windows操作系统 print(os.linesep)
13、路径
import os print(os.getcwd()) #输出当前目录 #1、相对路径 with open('文件.txt') as file: #通过相对路径打开文件 pass #2、绝对路径 print(os.path.abspath('文件.txt')) #获取绝对路径 #3、拼接路径 print(os.path.join('D:\文件','文件.txt')) #拼接字符串,将多个路径拼接在一起 #如果在使用拼接的时候有多个绝对路径,那么以从左到右为准,最后一次出现的路径为准进行拼接,其他参数会被忽略,如下 print(os.path.join("C:\\Users\\AMD",'D:自用',"c&&c++")) #D:自用\c&&c++
14、判断目录是否存在
import os print(os.path.exists('D:\111')) #False print(os.path.exists('D:\自用')) #True #真假表示是否存在
15、创建一级目录
import os os.mkdir('D:\\demo') #创建D:\demo目录,也就是在D盘创建一个文件夹 #如果路径已经存在就会抛出异常
16、判断文件目录是否存在再创建目录
import os path='D:\\demo' #指定要创建的目录 if not os.path.exists(path): #判断目录是否存在 exists方法是当路径存在就为假,不存在就为真,所以使用if not os.mkdir(path) #创建目录 else: print('该目录已经存在!')
17、创建多级目录
import os #使用makdedirs()函数 os.makedirs('D:\Test\Python\Test.txt')#创建D盘Test文件夹内Python文件夹内Test.txt,也就是创建了三个文件夹,txt只是这个文件夹的名字,目录无法创建具体文件
18、删除目录
import os os.rmdir('D:\Test\Python\Test.txt')#我们删除上个文件创建的.txt
19、删除非空目录
import shutil shutil.rmtree('D:\Test')#删除Test级一下全部的目录和内容
20、获取文件的基本信息
import os fileinfo=os.stat('图片1.png') #获取文件的基本信息 print('文件路径:',os.path.abspath('图片1.png')) print('索引号:',fileinfo.st_ino) print('设备号',fileinfo.st_dev) print('文件大小',fileinfo.st_size) print('最后一次访问时间',fileinfo.st_atime) print('最后一次修改时间',fileinfo.st_mtime) print('最后一次状态变化时间',fileinfo.st_ctime) #结果都是时间戳,要转换
21、遍历目录
import os tuples=os.walk("D:\自用\c&&c++\code数据结构与算法分析") for tuplel in tuples: print(tuplel,'\n')
22、删除文件
""" import os os.remove('古诗.txt') """ #最好像下面这样 import os.path path='古诗.txt' if os.path.exists(path): os.remove(path) else: print('文件不存在')
23、重命名文件和目录
import os src="D:\自用\新建 文本文档.txt" #原始目录 dst="D:\自用\测试.txt" #更改文件名后的目录 if os.path.exists(src): os.rename(src,dst) print('文件重命名完毕') else : print('文件不存在') #----------------重命名目录----------------- #目录重命名和文件没区别,只要把文件路径换成目录即可 src="666" #原始目录 dst="Test" #更改文件名后的目录 if os.path.exists(src): os.rename(src,dst) print('目录重命名完毕') else : print('目录不存在')
24、获取文件信息,更改版本
import os def formatTime(longtime): import time return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime)) #格式化时间 def formatByte(number): for(scale,label)in [(1024*1024*1024,'GB'),(1024*1024,'MB'),(1024,'KB')]:#处理内存 if number>=scale: return '%.2f %s'%(number*1.0/scale,label) elif number==1: return '1 字节' else: byte='%.2f'%(number or 0) return (byte[:-3]if byte.endswith('.00')else byte)+'字节' if __name__=='__main__': fileinfo=os.stat('图片1.png') print('文件路径:', os.path.abspath('图片1.png')) #输出基本信息 print('索引号:', fileinfo.st_ino) print('设备号', fileinfo.st_dev) print('文件大小', formatByte(fileinfo.st_size)) print('最后一次访问时间', formatTime(fileinfo.st_atime)) print('最后一次修改时间', formatTime(fileinfo.st_mtime)) print('最后一次状态变化时间', formatTime(fileinfo.st_ctime))
25、根据当前时间创建文件夹
import os import time def nsfile(s): b = os.path.exists("D:\\testFile\\") if b: print("该目录存在!") else: os.mkdir("D:\\testFile\\") # 生成文件 for i in range(1, s + 1): # 获取当前系统时间 localTime = time.strftime("%Y%m%d%H%M%S", time.localtime()) # 以当前系统时间作为文件名称 filename = "D:\\testFile\\" + localTime + ".txt" # a:以追加模式打开(必要时可以创建)append;b:表示二进制 f = open(filename, 'ab') testnote = '文件测试' # 文件内写入的信息 f.write(testnote.encode('utf-8')) # 写入文件信息,以utf-8的编码写入 f.close() print("file" + " " + str(i) + ":" + str(localTime) + ".txt")#打印出来创建的文件的名字 time.sleep(1) # 休眠一秒 print('生成文件成功!') if __name__ == '__main__': s = int(input("请输入需要生成的文件数:")) # 获取输入的文件个数 nsfile(s)
最后补充一下文件访问模式
python共三大主访问模式r、w、a
模式 描述
r 以只读⽅式打开⽂件。⽂件的指针将会放在⽂件的开头。这是默认模式。
rb 以⼆进制格式打开⼀个⽂件⽤于只读。⽂件指针将会放在⽂件的开头。这是默认模式。
r+ 打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。
rb+ 以⼆进制格式打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。
w 打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
wb 以⼆进制格式打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
w+ 打开⼀个⽂件⽤于读写。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
wb+ 以⼆进制格式打开⼀个⽂件⽤于读写。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
a 打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。
ab 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。
a+ 打开⼀个⽂件⽤于读写。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。⽂件打开时会是追加模式。如果该⽂件不存在,创建新⽂件⽤于读写。
ab+ 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。如果该⽂件不存在,创建新⽂件⽤于读写。
不要指望自己一次性全部记住,因为我也不怎么记得,虽然基本都是我写的。
文件全部放到GitHub仓库-2022-5-4-/python/file at main · 13870517674/-2022-5-4- · GitHub