求大神指导:python怎样读取深层次路径下文件的完整路径

有一个路径,比如是:"d:\\baidu\\tengxun\\360\\163",该路径下有很多文件假设有很多jpg文件,我怎样层层遍历这个路径得到最里面的各文件(如a.jpg)的完整路径呢?如"d:\\baidu\\tengxun\\360\\163\\a.jpg","d:\\baidu\\tengxun\\360\\163\\b.jpg"等这样的路径,当然也包括不是最里面的目录下有文件的情况,比如:"d:\\baidu\\tengxun\\x.jpg"这样的也要得到正确的完整路径。用python怎样实现呢?我用的os.walk()不好使,求指导啊!谢谢!

imgfiles = []
for path, dirs, files in os.walk("."):
    imgfiles.extend([os.path.join(path, f) for f in files if f.endswith('.jpg')])

追问

太厉害了!!!果然是大神啊,我搞了好几个小时写了两个小时了,写那么多代码还有问题,您这三行代码就解决问题了,不佩服不行啊,我还有个问题啊,这个代码得到了文件完整路径名的列表了,我要把这里面每项写在一个文件的一行,不能很乱地堆积在一行,怎么来操作呢?另外,您这个代码是检查jpg的文件,若是我要其他格式的文件呢,就是只要是文件就得到其完整路径名,怎么办呢?非常感谢您了

追答import os

def iterfiles(walkhome, fileext=None):
    for path, dirs, files in os.walk(walkhome):
        for fullname in (os.path.join(path, f) for f in files):
            if not fileext or fullname.endswith(fileext):
                yield fullname


with open("fileslist.log", 'wt') as store:
    for fullname in iterfiles(".", fileext=".txt"):
        store.write(fullname+'\n')


or

import os
import fnmatch

def iterfiles(walkhome, fmx="*.*"):
    """
        args:
            walkhome: start path
            fmx: filename shell-style wildcards
    """
    for path, dirs, files in os.walk(walkhome):
        for filename in fnmatch.filter(files, fmx):
            yield os.path.join(path, filename)


with open("fileslist.log", 'wt') as store:
    for fullname in iterfiles(".", "*.py"):
        store.write(fullname+'\n')

追问

非常感谢您!不好意思还有个问题,将读取的内容以utf-8格式写在文件中怎么操作?我记得python默认编码是ascii,这个编码问题太头疼了,总是搞不好,最后一个问题了,不好意思,非常感谢您!!

追答#!/usr/bin/env python
# coding: utf-8

import os
import fnmatch
import codecs

os_charset = 'utf-8' # in Windows os, usage "gb18030" instead of

def iterfiles(walkhome, fmx="*.*"):
    """
        args:
            walkhome: start path
            fmx: filename shell-style wildcards
    """
    for path, dirs, files in os.walk(walkhome):
        for filename in fnmatch.filter(files, fmx):
            yield os.path.join(path, filename)


with codecs.open("fileslist.log", 'w', 'utf-8') as store:
    for fullname in iterfiles("/home/tim/Workspace", "*.pdf"):
        store.write(fullname.decode(os_charset)+'\n')

温馨提示:答案为网友推荐,仅供参考
相似回答