Mam katalog root-ish zawierający wiele podkatalogów, z których wszystkie zawierają nazwę pliku data.txt. Chciałbym napisać skrypt, który pobiera katalog "root", a następnie odczytuje wszystkie podkatalogi i odczytuje wszystkie "dane.txt" w podkatalogach, a następnie zapisuje dane z każdego pliku data.txt do plik wyjściowy.Jak rekursywnie przeglądać wszystkie podkatalogi i czytać pliki?
Oto fragment mojego kodu:
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()
Moja doSomething() część - Przetestowałem i potwierdzone na to, aby działać, jeśli używam tę część tylko dla jednego pliku. Potwierdziłem również, że jeśli polecę wydrukować plik (skomentowana linia), skrypt wypisze 'data.txt'.
Teraz jeśli go uruchomić Python daje mi ten błąd:
File "recursive.py", line 11, in <module>
with open(file,'r') as fin:
IOError: [Errno 2] No such file or directory: 'data.txt'
Nie jestem pewien, dlaczego nie można go znaleźć - po wszystkim, to wypisuje dane.txt gdybym odkomentować wiersz "drukuj plik". Co robię nieprawidłowo?
Wystarczy komentarz w stylu: raz gniazdowania dostaje to głęboko, może to być trudne do odczytania. Aby uprościć, umieściłbym wewnętrzną część w oddzielnej funkcji 'def do_file (filename): ...'. Możesz także wykonać 'if file == 'data.txt': continue', aby uprościć i zapisać tam poziom. Zobacz także [PEP 20] (http://www.python.org/dev/peps/pep-0020/): "Mieszkanie jest lepsze niż zagnieżdżone". –