0

所以我是一个编程新手,我正在尝试用python制作一个程序,它基本上打开一个带有一堆列的文本文件,并根据行中的一个字符串将数据写入3个不同的文本文件。正如我的程序现在所代表的那样,我让它使用它将目录更改为特定的输出文件夹,os.chdir以便它可以打开我的文本文件,但我想要它做这样的事情:

想象一下这样设置的文件夹: Source文件夹包含N多个文件夹。这些文件夹中的每一个都包含N多个输出文件夹。每个输出文件夹包含 1 Results.txt

这个想法是让程序从源文件夹开始,查看Folder 1,查找output 1,打开.txt文件然后做它的事情。完成后,它应该返回folder 1并打开output 2并再次执行此操作。然后它应该返回Folder 1,如果它找不到更多的输出文件夹,它需要去Folder A然后进入Folder 2并重复这个过程,直到没有更多的文件夹。老实说,我不确定从哪里开始,我能做的最好的事情就是制作一个小程序来打印我所有的 .txt 文件,但我根本不知道如何打开它们。希望我的问题有意义,并感谢您的帮助。

4

5 回答 5

2

If all you need is to process each file in a directory recursively:

import os

def process_dir(dir):
    for subdir, dirs, files in os.walk(dir):
        for file in files:
            file_path = os.path.join(subdir, file)
            print file_path
            # process file here

This will process each file in the root dir recursively. If you're looking for conditional iteration you might need to make the loop a little smarter.

于 2013-11-07T08:43:27.543 回答
0

Read the base folder path and stored into variable and move to sub folder and process the text file using chdir and base path change the directory and read the sub folder once again.

于 2013-11-07T08:43:07.117 回答
0

首先,我认为您可以格式化您的问题以便更好地阅读。

关于您的问题,这是一个天真的实现示例:

import os

where = "J:/tmp/"
what = "Results.txt"

def processpath(where, name):
    for elem in os.listdir(where):
        elempath = os.path.join(where,elem)
        if (elem == name):
            # Do something with your file
            f = open(elempath, "w") # example 
            f.write("modified2")     # example
        elif(os.path.isdir(elempath)):
            processpath(elempath, name)

processpath(where, what)
于 2013-11-07T08:53:19.583 回答
0

如果没有chdir. 对我来说最直接的解决方案是使用os.listdir和过滤结果。然后os.path.join构造完整的相对路径而不是chdir. 我怀疑这将不太容易出现错误,例如在意外的当前工作目录中结束,然后您的所有相对路径都是错误的。

nfolders = [d for d in os.listdir(".") if re.match("^Folder [0-9]+$", d)]
for f1 in nfolders:
    noutputs = [d for d in os.listdir(f1) if re.match("^Output [0-9]+$", d)]
    for f2 in noutputs:
        resultsFilename = os.path.join(f1, f2, "results.txt")
        #do whatever with resultsFilename
于 2013-11-07T09:01:57.510 回答
0
dirlist = os.listdir(os.getcwd())
dirlist = filter(lambda x: os.path.isdir(x), filelist)

for dirname in dirlist:
    print os.path.join(os.getcwd(),dirname,'Results.txt')
于 2013-11-07T08:51:30.697 回答