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

发布于 2021-01-29 15:09:52

我有一个根目录目录,其中包含多个子目录,所有子目录均包含文件名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。我做错了什么?

关注者
0
被浏览
79
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要使用绝对路径,您的file变量只是没有目录路径的本地文件名。该root变量是路径:

    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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看