0

我正在尝试为我在文件夹中的每个文件上运行的批处理脚本创建一个输出文件夹/文件。我希望当我在 targetFolder 中找到所有文件或文件夹时,我可以创建一个 targetFolder_output,并且如果 targetFolder 有一个文件夹 anotherFolder,我可以在 targetFolder_out 中创建 anotherFolder_output。

所以最后我有 C:\targetFolder\anotherFolder 它是重复的 C:\targetFolder_output\anotherFolder_output

我计划对其中的所有文件执行此操作,但我认为如果我能克服这个文件夹障碍,我可以处理文件一个。

import os

targetFolder = "C:\\Users\\MyUserName\\Desktop\\tests"
outputFolder = targetFolder + "_output"

# Iterate over everything in the targetFolder
for directory, subdirectories, files in os.walk(targetFolder): 
    folderBasename = (os.path.basename(directory) )

    if not os.path.exists(outputFolder + "\\" + folderBasename + "_output"):
        os.makedirs(outputFolder + "\\" + folderBasename + "_output")

到目前为止,所做的只是在我的桌面“tests_output”上创建一个文件夹,其中包含以下文件夹:
tests_output\tests_output
tests_output\level2_output
tests_output\level3_output

我想看到的是:
tests_output\level2_output\level3_output

任何帮助将不胜感激!

4

1 回答 1

0
import os
class FCopy(object):
    def __init__(self, source):
        self.source = source
        self.target = os.path.join(source, '_output')
        if not os.path.exists(self.target):
            os.makedirs(os.path.abspath(self.target))
        self.lf, self.ld = [], []

    def walk(self, path):
        for x in (os.path.join(path, x) for x in os.listdir(path)):
            if x == self.target:continue
            if os.path.isfile(x):
                self.lf.append(x)
            elif os.path.isdir(x):
                self.ld.append(x)
                self.walk(x)
            #extra code if you want to handle symlinks

    def do(self):
        #if thats all you want,
        #code this directly in walk
        self.walk(self.source)

        for x in self.ld:
            x = x.replace(self.source, self.target)
            os.makedirs(x)
        for x in self.lf:
            x = x.replace(self.source, self.target)
            with open(x, 'w') as f:pass

f = FCopy('C:\\PerfLogs\\w\\tmp\\codemirror')
f.do()

你可以玩 ifexists 等等。如果你想要的只是源结构的两倍,那么你可以在walk中移动文件/目录的创建,相应的if...else PS:忽略我的目录,我只是在里面做一个测试

于 2014-03-31T22:46:53.083 回答