python os库_python OS库

os.walk函数的用法 (遍历文件夹下文件并获得路径)

我们在使用python时时常会遇到调用某些文件的需求,这时我们就需要得到这些文件的路径。python强大的自带os模块使得获得路径变得很容易。

下面介绍如何使用os.walk函数来遍历文件夹及子文件夹下所有文件并得到路径。

os.walk的完整定义形式如下:

os.walk(top, topdown=True, οnerrοr=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(根文件夹)。

下面举个例子

importos

path= 'E:\code'

for root,dirs,files inos.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']

importos

path= 'E:\code'

for root,dirs,files inos.walk(path):#print(root,dirs,files)

for file infiles: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 inls: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()需要传入的参数是绝对路径

正确用法:需要先使用python路径拼接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.joinimportsys,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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值