python OS库
os.walk函数的用法 (遍历文件夹下文件并获得路径)
我们在使用python时时常会遇到调用某些文件的需求,这时我们就需要得到这些文件的路径。python强大的自带os模块使得获得路径变得很容易。
下面介绍如何使用os.walk函数来遍历文件夹及子文件夹下所有文件并得到路径。
os.walk的完整定义形式如下:
os.walk(top, topdown=True, onerror=None, followlinks=False)
参数:
top:需要遍历目录的地址。
topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)。
onerror 需要一个 callable 对象,当walk需要异常时,会调用。
followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)。
以上四个参数一般只需要指定第一个文件夹路径,剩下的一般情况不需要指定。
os.walk使用
os.walk 的返回值是一个生成器(generator),也就是说我们需要用循环不断的遍历它(不可以直接print),来获得所有的内容。
每次遍历的对象都是返回的是一个三元元组(root,dirs,files)
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
注意,函数会自动改变root的值使得遍历所有的子文件夹。所以返回的三元元组的个数为所有子文件夹(包括子子文件夹,子子子文件夹等等)加上1(根文件夹)。
下面举个例子
import os path = 'E:\code' for root,dirs,files in os.walk(path): print(root,dirs,files) E:\code ['a', 'b'] ['1.bmp', 'code.lnk', 'ds.py'] E:\code\a [] ['2.txt'] E:\code\b [] ['你的.doc']
import os path = 'E:\code' for root,dirs,files in os.walk(path): #print(root,dirs,files) for file in files: print(os.path.join(root,file)) E:\code\1.bmp E:\code\code.lnk E:\code\ds.py E:\code\a\2.txt E:\code\b\你的.doc
os.path.splitext(path)
说明:将对应路径的文件名和后缀名分割
示例:
>>> #定义参数内容 ... import os >>> path1='E:\test\6.txt'#文件路径 >>> path2='E:\test'#目录 >>> >>> #用splitext()方法切割 ... split_path1=os.path.splitext(path1) >>> split_path2=os.path.splitext(path2) >>> >>> #打印结果 ... print(split_path1)#正常切割 ('E:\test\x06', '.txt') >>> print(split_path2)#目录切割后异常 ('E:\test', '') >>>
简单运用:统计整个e盘下,txt文件的总数
>>> file_number=0
>>> for root,dirs,files in os.walk("e:\\"):
... for file in files:
... if os.path.splitext(file)[1]==".txt":#将对应的文件与文件名分割
... file_number+=1
... #print (file)
...
>>>
>>> print (file_number)
246
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。(只包含该文件夹下的文件,子文件夹不包括)
它不包括 . 和 .. 即使它在文件夹中。
只支持在 Unix, Windows 下使用。
path = 'C:/Users/Administrator/Desktop/back_up' ls = os.listdir(path) for i in ls: print(i)
.DS_Store
1.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
2.png
20.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
backward.py
forward.py
generateds.py
model
save_training_imgs
style_imgs
vggnet
新建文件夹
os.path.isdir()
和os.path.isfile()
需要传入的参数是绝对路径
os.path.join()
函数,将os.listdir()
返回的名称拼接成文件或目录的绝对路径再传入os.path.isdir()
和os.path.isfile()
.def del_file(path):
ls = os.listdir(path)
for i in ls:
c_path = os.path.join(path, i)
if os.path.isdir(c_path):#判断某一对象(需提供绝对路径)是否为目录
del_file(c_path)
else:
os.remove(c_path)
os.path.isfile()
用于判断某一对象(需提供绝对路径)是否为文件
os.path.join()函数:连接两个或更多的路径名组件
1.如果各组件名首字母不包含’/’,则函数会自动加上
2.第一个以”/”开头的参数开始拼接,之前的参数全部丢弃,当有多个时,从最后一个开始
3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
os.path.join import sys,os path1 = 'home' path2 = 'deve' path3 = 'code' path4 = path1 + path2 + path3 path5 = os.path.join(path1,path2,path3) print('path4:',path4) print('path5:',path5) path4: homedevecode path5: home/deve/code path1 = '/home' path2 = 'deve' path3 = 'code' path4 = path1 + path2 + path3 path5 = os.path.join(path1,path2,path3) print('path4:',path4) print('path5:',path5) path4: /homedevecode path5: /home/deve/code path1 = 'home' path2 = '/deve' path3 = 'code' path4 = path1 + path2 + path3 path5 = os.path.join(path1,path2,path3) print('path4:',path4) print('path5:',path5) path4: home/devecode path5: /deve/code path1 = '/home' path2 = '/deve' path3 = 'code' path4 = path1 + path2 + path3 path5 = os.path.join(path1,path2,path3) print('path4:',path4) print('path5:',path5) path4: /home/devecode path5: /deve/code path1 = '/home' path2 = '/deve' path3 = '' path4 = path1 + path2 + path3 path5 = os.path.join(path1,path2,path3) print('path4:',path4) print('path5:',path5) path4: /home/deve path5: /deve/
os.path.dirname
os.path.dirname(path)
语法:os.path.dirname(path)
功能:去掉文件名,返回目录
import sys,os
print(os.path.dirname('/root/userfolder/SRFBN_CVPR19/a.py'))
/root/userfolder/SRFBN_CVPR19
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2019-03-21 问题 1936: [蓝桥杯][算法提高VIP]最大乘积
2019-03-21 指针 链表
2019-03-21 蓝桥杯 第九届 日志 统计
2019-03-21 子串!=子序列
2019-03-21 poj 3061