遍历文件目录的python 代码

来源:互联网 发布:詹姆斯打球特点 知乎 编辑:程序博客网 时间:2024/05/01 06:14

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

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

实现代码如下

1
2
3
4
5
6
7
8
9
10
11
12
import os
  
def get_file_names(path_name):
    printpath_name
    file_names= os.listdir(path_name)
    forname in file_names:
        ifos.path.isdir(name):
            get_file_names(os.path.abspath(name))
        else:
            printname
  
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):
    printname
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:
    forfilename infiles:
        printos.path.join(root,filename)

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


原创粉丝点击