Tôi có thư mục gốc-ish chứa nhiều thư mục con, tất cả đều chứa tên tệp data.txt. Những gì tôi muốn làm là viết một kịch bản mà có trong thư mục "root", và sau đó đọc qua tất cả các thư mục con và đọc mỗi "data.txt" trong thư mục con, và sau đó viết công cụ từ mọi tập tin data.txt để một tập tin đầu ra.Làm thế nào để đệ quy đi qua tất cả các thư mục con và đọc tệp?
Dưới đây là một đoạn mã của tôi:
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 của tôi() phần - Tôi đã thử nghiệm và xác nhận cho nó để làm việc nếu tôi chạy phần đó chỉ dành riêng cho một tập tin. Tôi cũng đã xác nhận rằng nếu tôi yêu cầu nó in tập tin thay vào đó (dòng nhận xét ra) kịch bản in ra 'data.txt'.
Ngay bây giờ nếu tôi chạy nó Python mang lại cho tôi lỗi này:
File "recursive.py", line 11, in <module>
with open(file,'r') as fin:
IOError: [Errno 2] No such file or directory: 'data.txt'
Tôi không chắc chắn lý do tại sao nó không thể tìm thấy nó - sau khi tất cả, nó in ra data.txt nếu tôi bỏ ghi chú dòng 'tệp in'. Tôi đang làm gì sai?
Chỉ cần một lời nhận xét phong cách: một lần làm tổ được sâu này, nó có thể khó đọc. Để đơn giản hóa, tôi sẽ đặt phần bên trong trong một hàm 'def do_file (filename): ...' riêng biệt. Bạn cũng có thể làm 'if file == 'data.txt': tiếp tục' để đơn giản hóa và lưu một cấp ở đó. Xem thêm [PEP 20] (http://www.python.org/dev/peps/pep-0020/): "Phẳng tốt hơn lồng nhau". –