循环遍历subdir中的文件并将输出放在其他子目录中

时间:2017-02-28 08:52:55

标签: python

我想对子目录中的所有文件执行操作,并将输出放在另一个目录中。例如,在/ Pictures /中有子目录/ January,/ February / etc和其中的imgages。我想对图像执行操作并将输出放到/ Processed /及其子目录/ January,/ Februady等。

我想这可以解决这个问题,但我真的可以使用一些帮助:

import os
path = '/Pictures/'
outpath = '/Processed/'
for subdir, dirs, files in os.walk(path):
    #do something with files and send out put to corresponding output dir

2 个答案:

答案 0 :(得分:1)

这应该给你基本的结构:

import os
path = 'Pictures/' # NOTE: Without starting '/' !
outpath = 'Processed/'
for old_dir, _, filenames in os.walk(path):
    new_dir = old_dir.replace(path, outpath, 1)
    if not os.path.exists(new_dir):
        print "Creating %s" % new_dir
        os.makedirs(new_dir)
    for filename in filenames:
        old_path = os.path.join(old_dir, filename)
        new_path = os.path.join(new_dir, filename)
        print "Processing : %s -> %s" % (old_path, new_path)
        # do something with new_path

它在'Processed/'中创建与'Pictures/'中相同的子文件夹结构,并迭代每个文件名。

对于文件夹中的每个文件,您都会获得new_path变量:

old_path'Pictures/1/test.jpg'new_path'Processed/1/test.jpg'

答案 1 :(得分:0)

这基本上遍历目录的所有文件夹,获取其文件;使用performFunction()执行某些操作并写入同一文件。 您可以修改此内容以写入不同的路径!

def walkDirectory(directory, filePattern):
    for path, dirs, files in os.walk(os.path.abspath(directory),followlinks=True):
        for filename in fnmatch.filter(files, filePattern):
         try:
            filepath = os.path.join(path, filename)
            with open(filepath) as f:
                s = f.read()
            s = performFunction()

            with open(filepath, "w") as f:
                print filepath
                f.write(s)
                f.flush()
            f.close()
         except:
           import traceback
           print traceback.format_exc()

希望它有所帮助!