遍历文件目录的python 代码

最近对python产生了兴趣,看了书后就想写写python代码实践一下。

我想到了一个递归遍历目录下所有文件的例子:首先显示当前的工作目录,然后遍历该目录下的所有文件,如果遇到的是目录(文件夹),则也显示该目录下的所有文件,如此循环。

实现代码如下

1
2
3
4
5
6
7
8
9
10
11
12
import os
  
def get_file_names(path_name):
     print path_name
     file_names = os.listdir(path_name)
     for name in file_names:
         if os.path.isdir(name):
             get_file_names(os.path.abspath(name))
         else :
             print name
  
get_file_names(os.getcwd())

上面代码中的os.getcwd()的作用是返回当前的工作目录,os.listdir 以列表的形式返回该目录下的所有文件和目录,但不包括子目录中的内容。

python 中怎么判断一个路径是文件还是目录(文件夹)呢?用os.path.isfile() 或者 os.path.isdir() 函数。

奇怪的是,开始我以为如果不是文件就是目录了,于是写了一下的代码

1
2
3
4
if os.path.isfile(name):
     print name
else :
     get_file_names(os.path.abspath(name))

结果遍历目录下的一个可执行ruby脚本文件却报错
OSError: [Errno 2] No such file or directory

就是认为某一个可执行的.rb文件不是文件,即os.path.isfile(“test.rb”)返回False ,难道是要文本文件才是真的,可是可执行的python 脚本文件却又可以正常输出文件名。

所以我改用os.path.isdir(),也这样才合理,因为毕竟是目录才可以遍历嘛。注意,file_names中存储的是文件名或者目录名,目录名需要转化为绝对路径才可以传递给get_file_names() 函数,所以使用 os.path.abspath() 把相对路径转化为绝对路径。

其实,python 还有另一个遍历文件的函数os.walk ,它可以返回目录下的所有文件和目录,包括子目录下的内容。os.walk()函数返回的是一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表。

所以上面的get_file_names()函数的部分可以写为
os.walk()实例代码:

1
2
3
4
file_names = os.walk(path_name)
for root,dirs,files  in file_names:
     for filename in files:
         print os.path.join(root,filename)

os.path.join()的用法
os.path.join(path1[, path2[, ...]])是将对个路径连接组合返回,其中第一个绝对路径之前的参数会被忽略。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值