文件走在python中

Aar*_*ken 9 python

所以,我有一个有效的解决方案,但它很难看,似乎不是惯用的.问题是这样的:

对于目录树,每个目录都设置为具有:

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

没有别的.我想,给出的根路径和行走的树应用xc()到的内容.xc外商投资企业,x在内容.x的文件,然后做儿童文件夹的内容是一样的.

具有解释的实际代码将不胜感激.

谢谢!

And*_*ffe 20

该函数os.walk递归遍历目录树,返回所有文件和子目录名称.

所以你要做的就是从文件名中检测.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))
Run Code Online (Sandbox Code Playgroud)

假设x并且xc可以在文件名上调用; 或者,您可以先读取内容并将其作为字符串传递给函数.

  • 这是一个非常好的解决方案,但我不打电话使用os.walk()"非递归"! (4认同)

alb*_*tov 6

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())
Run Code Online (Sandbox Code Playgroud)