python-常用文件系统操作

880 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情


大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:



常用文件系统操作

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']

文件处理

image-20220319092619473

目录/文件夹

image-20220319092635697


访问/权限

image-20220319092647661


文件描述符操作

image-20220319092705872


注意:

虽然os模块中也提供了open, read, write系列函数, 可以用于读写文件.

内建open返回的是文件对象. os.open返回的是文件描述符.

我们实际使用中仍然更推荐使用内建函数open创建文件对象, 并使用文件对象的读写操作来操作文件. 因 为文件对象使用起来更方便一些.


\