python中的文件遍历

2024-04-26 20:47:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有一个可行的解决方案,但它很难看,而且看起来不太习惯。问题是:

对于目录树,其中每个目录都设置为:

  • 1.xc文件
  • 至少1.x个文件
  • 遵循相同格式的任意数量的目录

没有别的了。我想,给定根路径并遍历树,将xc()应用于.xc文件的内容,x应用于.x文件的内容,然后对子文件夹的内容执行相同的操作。

实际代码与解释将不胜感激。

谢谢!


Tags: 文件代码路径目录文件夹内容数量格式
3条回答
import os

# your functions
def xc(contents): ....
def x(contents): ....

# store function references in a dict to dispatch, this is a common python idiom
funcMap = {'.xc': xc, '.x':x}

for dirpath, dirnames, filenames in os.walk(someDir):
    # use os.walk to iterate someDir's contents recursively. No
    # need to implement recursion yourself if stdlib does it for you
    for f in filenames:
        ext = os.path.splitext(f)[1]
        try:
            function = funcMap[ext]
        except KeyError:
             # no function to process files with extension 'ext', ignore it
             pass
        else:
            abspath = os.path.join(dirpath, f)
            with open(abspath) as f:
                function(f.read())

函数^{}递归地遍历目录树,返回所有文件名和子目录名。

因此,您只需检测文件名中的.x.xc扩展名,并在执行时应用您的函数(下面是未经测试的代码):

import os

for dirpath, dnames, fnames in os.walk("./"):
    for f in fnames:
        if f.endswith(".x"):
            x(os.path.join(dirpath, f))
        elif f.endswith(".xc"):
            xc(os.path.join(dirpath,f))

这假设可以对文件名调用xxc;或者,可以先读取内容,然后将其作为字符串传递给函数。

似乎是使用递归的好地方:

import os
def process_directory(dirName):
    """Recursively process all .xc and .x files in a parent directory and its
    subdirectories"""
    dirName = os.path.abspath(dirName)
    for f in os.listdir(dirName):
        f = os.path.join(dirName, f)
        baseName, ext = os.path.splitext(f)
        if ext == '.xc':
            print "Processing [", f, "]"
            xc(f)
        elif ext == '.x':
            print "Processing [", f, "]"
            x(f)
        elif os.path.isdir(f):
            print "\nDescending into directory", f
            process_directory(dirName=os.path.join(dirName, f))
        else:
            print "Not processing", f

我希望我没有错过你问题的重点。

相关问题 更多 >