首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python的Directory Walker

Python的Directory Walker
EN

Stack Overflow用户
提问于 2009-04-22 00:19:13
回答 4查看 6K关注 0票数 5

我目前使用的是来自Here的目录遍历程序

代码语言:javascript
复制
import os
class DirectoryWalker:
# a forward iterator that traverses a directory tree

def __init__(self, directory):
    self.stack = [directory]
    self.files = []
    self.index = 0

def __getitem__(self, index):
    while 1:
        try:
            file = self.files[self.index]
            self.index = self.index + 1
        except IndexError:
            # pop next directory from stack
            self.directory = self.stack.pop()
            self.files = os.listdir(self.directory)
            self.index = 0
        else:
            # got a filename
            fullname = os.path.join(self.directory, file)
            if os.path.isdir(fullname) and not os.path.islink(fullname):
                self.stack.append(fullname)
            return fullname

for file in DirectoryWalker(os.path.abspath('.')):
    print file

这一微小的更改允许您拥有文件中的完整路径。

有没有人能告诉我如何使用这个来查找文件名?我需要完整的路径和文件名。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-22 00:26:32

而不是使用'.‘作为您的目录,请参考其绝对路径:

代码语言:javascript
复制
for file in DirectoryWalker(os.path.abspath('.')):
    print file

另外,我建议使用'file‘以外的词,因为它在python语言中的意思是什么。不是一个关键字,所以它仍然可以运行。

顺便说一句,在处理文件名时,我发现os.path模块非常有用--我建议您仔细研究一下,尤其是

代码语言:javascript
复制
os.path.normpath

规格化路径(去掉多余的‘.’和‘theFolderYouWereJustIn/../’)

代码语言:javascript
复制
os.path.join

连接两条路径

票数 6
EN

Stack Overflow用户

发布于 2009-04-22 17:40:33

你为什么要自己做这么无聊的事情呢?

代码语言:javascript
复制
for path, directories, files in os.walk('.'):
    print 'ls %r' % path
    for directory in directories:
        print '    d%r' % directory
    for filename in files:
        print '    -%r' % filename

输出:

代码语言:javascript
复制
'.'
    d'finction'
    d'.hg'
    -'setup.py'
    -'.hgignore'
'./finction'
    -'finction'
    -'cdg.pyc'
    -'util.pyc'
    -'cdg.py'
    -'util.py'
    -'__init__.pyc'
    -'__init__.py'
'./.hg'
    d'store'
    -'hgrc'
    -'requires'
    -'00changelog.i'
    -'undo.branch'
    -'dirstate'
    -'undo.dirstate'
    -'branch'
'./.hg/store'
    d'data'
    -'undo'
    -'00changelog.i'
    -'00manifest.i'
'./.hg/store/data'
    d'finction'
    -'.hgignore.i'
    -'setup.py.i'
'./.hg/store/data/finction'
    -'util.py.i'
    -'cdg.py.i'
    -'finction.i'
    -'____init____.py.i'

但是如果你坚持,在os.path中有路径相关的工具,os.basename就是你所看到的。

代码语言:javascript
复制
>>> import os.path
>>> os.path.basename('/hello/world.h')
'world.h'
票数 14
EN

Stack Overflow用户

发布于 2009-04-22 00:27:33

os.path.dirname()?os.path.normpath()?os.path.abspath()?

这也是一个思考递归的好地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/775231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档