Подтвердить что ты не робот

Как рекурсивно пройти через все подкаталоги и прочитать файлы?

У меня есть корневой каталог, содержащий несколько подкаталогов, все из которых содержат имя файла data.txt. То, что я хотел бы сделать, это написать script, который принимает в корневой каталог, а затем читает все подкаталоги и читает каждый "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() - я протестировал и подтвердил, что она работает, если я запускаю эту часть только для одного файла. Я также подтвердил, что если я скажу, что вместо этого напечатал файл (прокомментированная строка), script распечатает "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, если я раскомментирую строку "файл печати". Что я делаю неправильно?

4b9b3361

Ответ 1

Вам нужно использовать абсолютные пути, ваша переменная 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()