python中os和shutil模块对文件的一条龙操作

 

一、创建

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() 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值