在Python中创建文件主要是通过open关键字来实现的。
语法格式:
方法1:f=open('文件名','访问模式') 方法2:with open('文件名','访问模式') as f:(推荐使用,当执行完文件操作后会自动回收文件对象) 文件操作语句
示例:
f=open('text.txt','w+')#以读写方式创建一个text文件 print(type(f))#<class '_io.TextIOWrapper'>
文件访问模式:
模式 | 描述 |
---|---|
r | 以只读形式打开文件,文件指针在文件头部 |
r+ | 以读写形式打开一个文件,文件指针在文件头部 |
rb | 以二进制形式打开一个文件用于只读,文件指针在文件头部 |
rb+ | 以二进制形式打开一个文件用于读写,文件指针在文件头部 |
w | 以写入形式打开一个文件,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件 |
w+ | 以读写形式打开一个文件,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件 |
wb | 以二进制形式打开一个文件只用于写入,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件 |
wb+ | 以二进制形式打开一个文件用于读写,如果文件也存在,新内容会覆盖,如果文件不存在则创建新文件 |
a | 以追加形式打开一个文件,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入 |
a+ | 打开一个文件用于读写,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入 |
ab | 以二进制形式打开一个文件用于追加,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入 |
ab+ | 以二进制形式打开一个文件用于追加,如果文件存在,文件指针放在文件末尾,新内容加在已有内容之后,如果文件不存在,则创建文件执行写入 |
文件写入是通过write方法来实现的,且访问模式不能是r和相关模式。
语法格式:
f.write("内容") f.close()#操作完毕后一定要关闭!
示例:
f=open('text.txt','w+',encoding='utf-8')#写入中文时最好设置一下字符编码 f.write("你好!")#给text.txt文件写入“你好” f.close()#对文件内容操作完后一点要记得关闭!
注意:
write()方法是不带回车的,要实现内容换行,可以自行添加\n
文件读取有三个方法可以实现,分别是:read()、readline()、readlines(),可以给它们传递参数,参数是读取的字符数,读取的模式只能是r和r相关的模式。
语法格式:
1、f.read() 2、f.readline() 3、f.readlines()
示例:
f=open('text.txt','r',encoding='utf-8') print("1",f.read())#读取到内容 print("2",f.readline())#空字符串,read()方法已经将内容读出,后面的就取不到内容了 print("3",f.readlines())#空列表 f.close() #分开操作 f1=open('text.txt','r',encoding='utf-8') f2=open('text.txt','r',encoding='utf-8') f3=open('text.txt','r',encoding='utf-8') print("1",f1.read())#读取全部内容,解析换行 print("2",f2.readline())#读取单行内容,解析换行 print("3",f3.readlines())#读取全部内容保存列表中,不解析换行,列表元素是每行的内容 f1.close() f3.close() f2.close()
要操作文件本身,我们就要引入os模块,通过os.remove()可以实现删除文件的操作。
语法格式:
os.remove(fpath)
示例:
import os fname=input("请输入文件名:") if os.path.exists(fname):#路径合法性判断 os.remove(fname)#文件存在就删除文件 print("文件删除成功!") else: print("文件不存在!无法操作!")
如果要实现文件、目录重命名的操作,要通过os.rename()来实现。
语法格式:
os.rename(oldname,newname)#可以放文件路径,也可以放文件夹路径
示例:
import os oldname=input("请输入原文件名:") if os.path.exists(oldname):#路径合法性判断 newname=input("请输入新文件名:") os.rename(oldname,newname)#如果路径存在就执行重命名操作 print("文件重命名成功!") else: print("文件不存在!无法操作!")
如果要复制文件就需要引入shutil模块,通过shutil.copy()来复制到任意路径。
语法格式:
shutil.copy(path,newpath)
示例:
import shutil,os path=input("请输入目标文件路径:") if os.path.exists(path):#路径合法性判断 newpath=input("请输入复制路径:")#如果带有文件名就是复制和重命名,没有文件名就是复制 try: shutil.copy(path,newpath)#如果复制的文件和复制后的文件是同一个就会报错 print("复制完成!") except shutil.SameFileError as e:#同命名文件异常处理 print("已存在同命名文件!") else: print("文件不存在!")
要实现移动文件的操作就需要使用shutil.move()方法,它可以将文件从一个路径移到另一个路径。
语法格式:
shutil.move(path,newpath)
示例:
import shutil,os path=input("请输入目标文件路径:") if os.path.exists(path): newpath=input("请输入移动路径:") try: shutil.move(path,newpath) print("移动完成!") except shutil.Error:#当文件已存在时的异常处理 print("文件已存在") else: print("文件不存在!")
文件的读取不一定都是从开头起读,我们也可以为它设置一个出发位置,即移动文件指针,要移动文件指针就要通过seek(offset[,start])来实现,offset是移动字节数,start是参考位置,0为参考开头,1为参考当前。2位参考结尾。
语法格式:
f.seek(2)
示例:
f=open('text.txt','r+') f.write("abcdefg") f.seek(3)#移动三个字节 print(f.read(2))#从c开始读取两个字符:de f.close()
如果要创建目录我们可以通过os.mkdir()来实现创建单个目录或者使用os.makedirs()来创建多级目录。
语法格式:
os.mkdir(path)#必须保证上一级目录是存在的,因为它只会建最后一个目录 os.makedirs(path)#可以用于创建多级目录
示例:
#1、mkdir方法创建单个目录 import os path=input("请输入创建目录路径:") index=path.rfind('/') if os.path.exists(path[0:index]):#判断上一级目录是否存在 os.mkdir(path)#只创建最后一个目录 print("创建文件夹成功!") else: print("路径错误!") #2、makedirs方法创建多级目录 import os path=input("请输入创建目录路径:") print(os.getcwd()) if not os.path.exists(path):#如果目录没有冲突就创建多级目录 os.makedirs(path)#创建多级目录 print("创建文件夹成功!") else: print("目录已存在!")
如果我们要查看目录下有什么文件,可以使用os.walk()和os.listdir()来遍历该目录,得出里面有什么文件。
语法格式:
flist1=os.walk(path)#flist1是一个生成器对象,可以遍历生成器查看数据 flist2=os.listdir(path)#flist2是一个列表,仅遍历当前目录的文件内容
示例:
#os.walk当前目录及子目录所有文件和文件 import os for k in os.walk('../work'): print(k) #结果: ('../work', ['b', 'c'], ['t.txt', 'work1.py']) #遍历所有目录,第一个元素为当前路径,子文件夹放在第一个列表,子文件放在第二个列表 ('../work\\b', [], ['t3.txt']) ('../work\\c', ['d'], ['t.txt']) ('../work\\c\\d', ['e'], []) ('../work\\c\\d\\e', [], []) #os.listdir(path)查看当前目录下的文件 import os print(os.listdir("../work"))#仅返回当前目录下的文件 #结果: ['b', 'c', 't.txt', 'work1.py'] #os.listdir(path)递归遍历: import os fpath="..\work" def func(fpath): for i in os.listdir(fpath): fpath1=os.path.join(fpath,i)#路径拼接 if os.path.isfile(fpath1):#判断是否为文件 print("文件:",fpath1) else: print("文件夹:",fpath1) func(fpath1) func(fpath)
复制目录的操作,我们主要是通过shutil.copytree()来实现的。
语法格式:
shutil.copytree(dir,newpath)#newpath必须不存在 #copytree主要是复制文件夹的内容,可以在后面加原文件夹名字以满足复制 #文件夹要求,如shutil.copytree(r"..\work\b",r"..\work\d\b") #它会在d中创建一个b文件夹,然后把b文件夹里复制的东西都放进去
示例:
import shutil shutil.copytree(r"..\work\b",r"..\work\d\b")#将b文件下的内容复制到d创建的b文件中
如果要移动目录也是通过shutil.move()来实现。
语法格式:
shutil.move(oldpath,newpath)
示例:
import shutil shutil.move(r'..\work\b',r'..\work\c')#将b目录移动到c目录内
删除目录的操作可以通过shutil.rmtree()和os.rmdir()来实现,os.rmdir()只能删除空目录,而shutil.rmtree()可以删除多级非空目录。
语法格式:
os.rmdir(dpath) shutil.rmtree(dpath)
示例:
import shutil,os os.rmdir("e/d/e")#删除目录e/d下面的e空文件夹 shutil.rmtree('e')#删除目录e下的所有文件和文件夹
函数 | 描述 |
---|---|
os.path.exists(path) | 判断路径是否存在,有就返回True,没有就返回False |
os.path.join(fpath,spath) | 目录拼接,将spath拼接到fpath后,spath不需要带斜杠 |
os.path.isfile(path) | 判断路径是否是文件,是就返回True,不是就返回False |
os.path.isdir(path) | 判断路径是否是文件夹,是就返回True,不是就返回False |