Python遍历某目录下的所有文件夹与文件路径

本文与《【Java】读取其下所有文件夹与文件的路径》(点击打开链接)为姊妹篇,主要讲述Python对于文件信息的读取操作。

Python对于文件信息的读取操作,在其固有类os中。

下面以读取F盘下的所有文件夹作为例子说明这个问题:

Python对于文件夹的遍历有两种写法,一种是直接利用其封装好的walk方法直接操作。
这是Python做得比Java优势的地方:

# -*-coding:utf-8-*-
import os
for root,dirs,files in os.walk("f:\\"):
 for dir in dirs:
  print os.path.join(root,dir).decode('gbk').encode('utf-8');
 for file in files:
  print os.path.join(root,file).decode('gbk').encode('utf-8');

运行效果如下:

上述程序,将os.walk读取到的所有路径root、目录名dirs与文件名files,也就是三个文件数组利用foreach循环输出。

join方法就是讲其路径与目录名或者文件名连接起来,组成一个完整的目录。

后面的.decode('gbk').encode('utf-8');方法主要是给Eclipse下的PyDev控制台用的,如果不加控制台的输出会出现乱码,但是,如果你的Python程序是要拉到Windows的控制台cmd,使用python xx.py运行的话,请不要加这段编码方法,同时去掉开头的# -*-coding:utf-8-*-。因为cmd是使用gb2312简体中文编码的,而不是像Linux的终端是utf-8编码。

也可以根据Java的递归思想,写成以下的形式:

# -*-coding:utf-8-*- 

import os;
files = list();
def DirAll(pathName):
 if os.path.exists(pathName):
  fileList = os.listdir(pathName);
  for f in fileList:
   if f=="$RECYCLE.BIN" or f=="System Volume Information":
    continue;
   f=os.path.join(pathName,f);
   if os.path.isdir(f):
    DirAll(f);
   else:
    dirName=os.path.dirname(f);
    baseName=os.path.basename(f);
    if dirName.endswith(os.sep):
     files.append(dirName+baseName);
    else:
     files.append(dirName+os.sep+baseName); 

DirAll("f:\\");
for f in files:
 print f.decode('gbk').encode('utf-8');

运行效果如下:

当然,这种形式有其弊端,就是不能遍历一些系统保留文件夹,如$RECYCLE.BIN、System Volume Information等,如果不写判断条件,会导致下面的读取出错。因此,以后遍历文件夹的时候,还是建议时候上面的os.walk的方式。

不过,我们可以从上面的程序看到几个常见的用法,os.sep能够直接返回文件分隔符/或者\\、、os.path.join(文件所在目录的路径、文件名)能把文件所在目录的路径与文件名连接起来,os.path.isdir(完整路径)能判断是否是目录,endswith("xx")方法能判断字符串是否以xx结束的。os.path.dirname()能得到文件所在目录的路径,os.path.basename()能得到文件名,os.listdir(路径)能得到相应的文件列表,等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • python中遍历文件的3个方法
  • python遍历文件夹并删除特定格式文件的示例
  • python使用os模块的os.walk遍历文件夹示例
  • Python遍历目录中的所有文件的方法
  • Python遍历目录并批量更换文件名和目录名的方法
  • Python实现递归遍历文件夹并删除文件
  • Python中文件遍历的两种方法
  • python 实时遍历日志文件
  • Python遍历指定文件及文件夹的方法
  • Python利用递归和walk()遍历目录文件的方法示例
(0)

相关推荐

  • python使用os模块的os.walk遍历文件夹示例

    复制代码 代码如下: #-*- coding:utf-8 -*- import os if __name__ == '__main__':    try:    '''traval and list all files and all dirs'''     for root, dirs, files in os.walk('D:' + os.sep + 'Python27'):        print '-------------------directory < ' + root + '

  • python 实时遍历日志文件

    open 遍历一个大日志文件 使用 readlines() 还是 readline() ? 总体上 readlines() 不慢于python 一次次调用 readline(),因为前者的循环在C语言层面,而使用readline() 的循环是在Python语言层面. 但是 readlines() 会一次性把全部数据读到内存中,内存占用率会过高,readline() 每次只读一行,对于读取 大文件, 需要做出取舍. 如果不需要使用 seek() 定位偏移, for line in open('fi

  • Python遍历指定文件及文件夹的方法

    本文实例讲述了Python遍历指定文件及文件夹的方法.分享给大家供大家参考.具体如下: 初次编写: import os def searchdir(arg,dirname,names): for filespath in names: open ('c:\\test.txt','a').write('%s\r\n'%(os.path.join(dirname,filespath))) if __name__=="__main__": paths="g:\\" os.

  • Python遍历目录中的所有文件的方法

    os.walk生成器 os.walk(PATH), PATH是个文件夹路径,当然可以用.或者../这样啦. 返回的是个三元元组为元素的列表, 每个元素代表了一个文件夹下的内容.第一个就是当前文件夹下内容. 返回的三元元组代表(该工作文件夹, 该文件夹下的文件夹的列表, 该文件夹下文件的列表). 所以, 获得所有子文件夹, 就是(d代表这三元元组): os.path.join(d[0],d[1]); 获得所有子文件, 就是: os.path.join(d[0],d[2]); 以下例子使用了两套循环

  • python中遍历文件的3个方法

    今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历.用python进行文件遍历有多种方法,这里列举并说明一下. os.path.walk() 这是一个传统的用法. walk(root,callable,args)方法有三个参数:要遍历的目录,回调函数,回调函数的参数(元组形式). 调用的过程是遍历目录下的文件或目录,每遍历一个目录,调用回调函数,并把args作为参数传递给回调函数. 回调函数定义时也有三个参数,比如示例中的func中的三个参数,分别为walk传来的参数.

  • Python遍历目录并批量更换文件名和目录名的方法

    本文实例讲述了Python遍历目录并批量更换文件名和目录名的方法.分享给大家供大家参考,具体如下: #encoding=utf-8 #author: walker #date: 2014-03-07 #summary: 深度遍历指定目录,并将子目录和文件名改为小写 #注意,此程序只针对windows,windows下文件(夹)名不区分大小写 import os import os.path import shutil #读入指定目录并转换为绝对路径 rootdir = raw_input('ro

  • python遍历文件夹并删除特定格式文件的示例

    复制代码 代码如下: #!/usr/bin/python# -*- coding: utf-8 -*- import os def del_files(path):    for root , dirs, files in os.walk(path):        for name in files:            if name.endswith(".tmp"):                os.remove(os.path.join(root, name))  pri

  • Python实现递归遍历文件夹并删除文件

    思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹名称不等于".svn",则递归上面的方法 Python的实现 代码 import os import shutil import os.path import stat rootdir="F:\\work\\Test" for parent,dirnames,filen

  • Python利用递归和walk()遍历目录文件的方法示例

    前言 经常需要检查一个"目录或文件夹"内部有没有我们想要的文件或者文件夹,就需要我们循环迭代出所有文件和子文件夹,Python中遍历指定目录下所有的文件和文件夹,包含多级目录,有两种方法,一种是通过递归思想去遍历,另一种是os模块的walk()函数下面话不多说,就来一起看看详细的介绍: 列出目录结构 一.递归方法 #coding:utf-8 import os allfile=[] def getallfile(path): allfilelist=os.listdir(path) f

  • Python中文件遍历的两种方法

    关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os.listdir()递归遍历. 方法一:利用os.walk os.walk可以自顶向下或者自底向上遍历整个文件树,然后返回一个含有3个元素的tuple,(dirpath, dirnames, filenames),要注意的是,os.walk()会返回一个generater,所以调用的时候一定要放到for循环中. 复制代码 代码如下: import osdef walk_dir(dirname): f

随机推荐