python – 如何递归地遍历所有子目录并读取文件?

我有一个包含多个子目录的root-ish目录,它们都包含一个文件名为data.txt。我想做的是编写一个接收“根”目录的脚本,然后读取所有子目录,并读取子目录中的每个“data.txt”,然后将每个data.txt文件中的内容写入输出文件。

以下是我的代码片段:

import os
import sys
rootdir = sys.argv[1]

with open('output.txt','w') as fout:
    for root, subFolders, files in os.walk(rootdir):
        for file in files:
            if (file == 'data.txt'):
                #print file
                with open(file,'r') as fin:
                    for lines in fin:
                        dosomething()

我的dosomething()部分 – 我已经测试并确认它工作,如果我正在运行该部分只是一个文件。我也确认,如果我告诉它打印文件(注释掉的行)脚本打印出’data.txt’。

现在,如果我运行它Python给我这个错误:

File "recursive.py", line 11, in <module>
    with open(file,'r') as fin:
IOError: [Errno 2] No such file or directory: 'data.txt'

我不知道为什么它找不到它 – 毕竟,如果我取消注释“打印文件”行,它打印出data.txt。我做错了什么?

最佳答案
您需要使用绝对路径,您的文件变量只是一个本地文件名,没有目录路径。根变量是那个路径:

with open('output.txt','w') as fout:
    for root, subFolders, files in os.walk(rootdir):
        if 'data.txt' in files:
            with open(os.path.join(root, 'data.txt'), 'r') as fin:
                for lines in fin:
                    dosomething()

转载注明原文:python – 如何递归地遍历所有子目录并读取文件? - 代码日志