一、创建
1、创建文件
其实这个不需要考虑,在接下来修改文件的时候,如果文件不存在,会自动创建该文件。
2、创建文件夹
主要有两个函数
1、os.makedirs(path) 多层创建目录
2、os.mkdir(path) 创建目录
os.makedirs(path,mode,exist_ok)
参数:
- path:'要创建文件夹的路径'
- mode:【待研究】
注意:如果该文件夹创建之前已经存在,那么就会报 错:“[WinError 183] 当文件已存在时,无法创建该文件。:'Test'”
所以,为了保证程序的正常运行,需要与 [os.path.exists(path): 判断一个目录是否存在] 配合使用。完整程序如下:
if not os.path.exists(path):
# 如果不存在则创建目录
os.makedirs(path)
return True
else:
# 如果目录存在则不创建,并提示目录已存在
return False
二、删除
1、删除文件。
对于文件,只需要os.remove('要删除的文件路径')
2、删除空的文件夹
上边的函数对于删除文件夹是不好使的,会提示你:“你没有权限读取这个文件。”对于空的文件夹,你需要用os.rmdir()函数。
3、删除非空的文件夹
对于非空的文件夹,要想用OS模块搞定就有些困难了,但是也不是没有办法,数学里有一种递归思想(把未知的问题转化为已知的问题)在这里就派上用场了:你需要遍历这个文件夹里的文件,先用1方法逐个删除文件后,再用2方法删除这个空的文件夹。
当然,懒惰使人进步,这么复杂的方法,当然没有人用了,这里还有一种更简单的方法:
shutil.rmtree('文件路径')。
注意:用这个函数删除文件会报:“目录名称无效”的错误。而且,在使用这个方法之前,需要先导入shutil这个内置包。
import shutil
4、花式删除
os.removedirs('文件路径')。这个方法会递归地删除目录。即如果子目录被成功删除,removedirs()并不会罢手,会继续删除父目录,直到“斩草除根”,如果子目录没有成功删除,将抛出错误。
eg:加假如我们要删除grandfather/father/son这个目录,使用 os.removedirs('grandfather/father/son') 将首先删除 “grandfather/father/son”目录,然后再删除grandfather/father 和 grandfather( 前提是删除之前son是空目录,剩下两个目录里也没有其他文件)。
三、修改文件。
1、修改txt文件
第一步:读取文件。
f = open('文件路径','r+')
其中,参数r+的意思是可以对文件进行读写,另附参数表如下。
r+ | 具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容 |
w+ | 具有读写属性,写的时候如果文件存在,会被清空,从头开始写。 |
r | 打开只读文件,该文件必须存在 |
w | 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件 |
a(a+) | 以附加的方式打开只写文件。若文件不存在,则建立文件,若文件存在,写入的数据会被加到文件尾。 |
注:上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过Linux会忽略该字符。
第二步:替换文件内容。
for s in f.readlines():#f.readlines存放了文本内容
s = s.replace('a','b')#把a替换成b
f.close()#修改完文件记得关闭
修改文件和这个相同,只需要把s.replace改成s.write('写入的内容')即可。
2、对文件(夹)的常用操作
1)移动文件:shutil.move(“旧文件夹”,”新文件夹”)
2)复制文件:shutil.copyfile(“旧文件”,”新文件”) ,其中,oldfile和newfile都只能是文件
3)复制文件夹:shutil.copytree(“旧目录”,”新目录”) #只能是对目录进行操作,且新的目录必须不存在
shutil.copy(“旧目录”,”新文件”) ,其中,旧目录只能是文件夹,newfile可以是文件,也可以是目标目录
4)重命名文件(夹): os.rename(“以前的名字”,”新的名字”)
附:另外一些常见的文件操作函数:
1. 得到当前的工作目录 : os.getcwd()
2. 返回指定目录下的所有文件和目录名: os.listdir()
3. 获取路径名:os.path.dirname()
4. 获取文件名:os.path.basename()
5. 检查是否是文件: os.path.isfile()
6. 检查是否是目录: os.path.isdir()
7. 判断是否是绝对路径:os.path.isabs()
8. 检查路径是否存在: os.path.exists()
9. 分离扩展名:os.path.splitext() #如果要返回后缀,取索引为1的值
10. 获取路径名:os.path.dirname()
11. 获取文件名:os.path.basename()