持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN C/C++领域新星创作者blog.csdn.net/chuxinchang…
- 掘金LV3用户 juejin.cn/user/138142…
- 阿里云社区专家博主,星级博主,技术博主 developer.aliyun.com/profile/exp…
- 华为云云享专家 bbs.huaweicloud.com/community/m…
常用文件系统操作
os模块中包含了很多对文件/目录的基础操作, 参见下表.
walk:生成一个目录树下的所有文件名
- 返回的是一个三元组:当前目录,当前目录下的目录,当前目录含有哪些文件
- 自动完成递归
import os.path as path
import os
p = 'Z:/test'
for item in os.walk(p):
print(item)
#执行结果:
('Z:/test', ['a', 'b'], [])
('Z:/test\a', ['aa'], [])
('Z:/test\a\aa', [], ['aa.txt'])
('Z:/test\b', ['c'], ['b.txt'])
('Z:/test\b\c', [], ['c.txt'])
因为返回的是三元组,所以可以写成: 打印完整路径
base:当前目录
_ 当前目录中含哪些目录,不需要用,所以用占位符代替
files:当前目录含有哪些文件
import os.path as path
import os
p = 'Z:/test'
#打印完整路径
for base,_,files in os.walk(p):
for f in files:
print(base+f)
#执行结果:
Z:/test\a\aaaa.txt
Z:/test\bb.txt
Z:/test\b\cc.txt
remove:删除文件
import os.path as path
import os
p = 'Z:/test/'
print(path.exists(p+'b/b.txt')) #True
os.remove(p+'b/b.txt') #删除路径为: Z:/test/b/b.txt文件
print(path.exists(p+'b/b.txt')) #False
listdir:列出当前目录的文件
import os.path as path
import os
p = 'Z:/test/'
print(os.listdir(p))#列出当前目录的文件 #['a', 'b']
rmdir:删除目录
注意:这个只能删除空目录
import os.path as path
import os
p = 'Z:/test/'
print(path.exists(p+'a')) #True
print(os.listdir(p))#列出当前目录的文件 ['a', 'b']
print(os.rmdir(p+'a')) #报错:空目录不能直接删除 OSError: [WinError 145] 目录不是空的。: 'Z:/test/a'
如果想要删除非空目录:使用shutil模块的rmtree函数
import os.path as path
import os
import shutil
p = 'Z:/test/'
print(path.exists(p+'a')) #True
print(os.listdir(p))#列出当前目录的文件 ['a', 'b']
shutil.rmtree(p+'a')
print(os.listdir(p))#列出当前目录的文件 ['b']
文件处理
目录/文件夹
访问/权限
文件描述符操作
注意:
虽然os模块中也提供了open, read, write系列函数, 可以用于读写文件.
内建open返回的是文件对象. os.open返回的是文件描述符.
我们实际使用中仍然更推荐使用内建函数open创建文件对象, 并使用文件对象的读写操作来操作文件. 因 为文件对象使用起来更方便一些.
\