Tôi đang cố gắng lấy danh sách tất cả các tệp nhật ký (.log) trong thư mục, bao gồm tất cả các thư mục con.Cách nhận tệp trong thư mục, bao gồm tất cả các thư mục con
Trả lời
Thanh toán Python Recursive Directory Walker. Trong os.listdir() và os.walk() ngắn là bạn của bạn.
Nếu bạn muốn liệt kê trong thư mục hiện hành, Bạn có thể sử dụng một cái gì đó như:
import os
for e in os.walk(os.getcwd()):
print e
Chỉ cần thay đổi
os.getcwd()
đến con đường khác để có được kết quả đó.
Câu trả lời này không giải quyết câu hỏi của OP và không liên quan đến hầu hết những người sẽ tìm kiếm cùng một câu trả lời. – Andrew
import os
import os.path
for dirpath, dirnames, filenames in os.walk("."):
for filename in [f for f in filenames if f.endswith(".log")]:
print os.path.join(dirpath, filename)
Nếu bạn muốn tìm kiếm trong một thư mục khác từ "." bạn có thể chuyển direcotry như sys.argv [1] và gọi os.walk (sys.argv [1]). –
Cải tiến bổ sung: Sử dụng trình tạo thay vì đọc danh sách: đối với tên tệp trong (f cho f ...) –
Nếu bạn muốn loại trừ một thư mục nhất định, ví dụ 'old_logs', bạn có thể xóa nó khỏi' dirnames' và nó sẽ không được tìm kiếm: 'if 'old_logs" trong dirnames: dirnames.remove ("old_logs") ' – CGFoX
Bạn cũng có thể sử dụng mô-đun glob cùng với os.walk.
import os
from glob import glob
files = []
start_dir = os.getcwd()
pattern = "*.log"
for dir,_,_ in os.walk(start_dir):
files.extend(glob(os.path.join(dir,pattern)))
Các dấu gạch dưới làm gì trong vòng lặp for? '_' –
@nueverest 'os.walk' trả về một 3-tuple' (dirpath, dirnames, filenames) 'tại mỗi lần lặp, và chúng ta chỉ quan tâm đến' dirpath' (được gán cho 'dir' ở trên); dấu gạch dưới chỉ được sử dụng như phần giữ chỗ cho 2 giá trị khác mà chúng ta không quan tâm (tức là 'dirnames', và sau đó' filenames', được gán cho biến '_', mà chúng ta sẽ không bao giờ sử dụng). – tavnab
Tôi có một giải pháp:
import os
for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]:
print logfile
hoặc
import subprocess
(out, err) = subprocess.Popen(["find", ".", "-type", "f", "-name", "*.log"], stdout=subprocess.PIPE).communicate()
for logfile in out.split('\n')[0:-1]:
print logfile
Hai mất lợi thế của find . -type f -name *.log
.
Người đầu tiên là đơn giản hơn nhưng không được bảo đảm cho trắng-không gian khi thêm -name *.log
, nhưng làm việc tốt cho đơn giản find ../testdata -type f
(trong môi trường OS X của tôi).
Phương thức thứ hai sử dụng tiến trình con dường như phức tạp hơn, nhưng đây là an toàn không gian trắng (một lần nữa, trong môi trường OS X của tôi).
này được lấy cảm hứng từ Chris Bunch, trong câu trả lời https://stackoverflow.com/a/3503909/2834102
- 1. Cách đếm tất cả các tệp trong một thư mục, thư mục con của nó và tất cả. Số đếm không được bao gồm số thư mục
- 2. Tệp Android.mk - bao gồm tất cả các tệp nguồn trong các thư mục và thư mục khác nhau
- 3. Liệt kê tất cả các tệp và thư mục trong thư mục + thư mục con
- 4. Danh sách tất cả thư mục và thư mục con
- 5. Tạo một thư mục con cho tất cả các thư mục trong thư mục
- 6. Cách gzip tất cả các tệp trong tất cả các thư mục con trong bash
- 7. CoffeeScript - biên dịch tất cả các tệp .coffee trong thư mục hiện tại và tất cả các thư mục con
- 8. Bash: scp tất cả các tệp trong một thư mục, nhưng không phải thư mục con
- 9. Liệt kê các tệp trong thư mục và tất cả thư mục con
- 10. Nhận tất cả các thư mục trong Thư viện Explorer
- 11. Lọc trên thư mục và tất cả các thư mục con trong Google Analytics
- 12. Thư mục sao chép iOS bao gồm các thư mục con
- 13. bao gồm các tệp tiêu đề - liên quan đến thư mục hiện tại hoặc để bao gồm các thư mục?
- 14. Xóa thư mục và tất cả các tệp/thư mục con
- 15. Bash/Shell-Di chuyển tất cả các tệp từ thư mục con vào thư mục đích?
- 16. Python - Nhận đường dẫn tương đối của tất cả các tệp và thư mục con trong một thư mục
- 17. Liệt kê tất cả các thư mục trong thư mục
- 18. Cách nén tất cả các tệp trong thư mục
- 19. Nhận tất cả tên tệp trong thư mục bằng JFileChooser?
- 20. Trong studio trực quan cách bao gồm tất cả .libs trong một thư mục
- 21. Tìm tất cả các tập tin trong thư mục không phải là thư mục tự
- 22. CMake: Cách lấy tên của tất cả các thư mục con của một thư mục?
- 23. Nhận tất cả các thư mục con chỉ chứa các tệp
- 24. danh sách VBScript tất cả các file PDF trong thư mục và thư mục con
- 25. Favicon trong thư mục con tất cả tên miền phụ
- 26. Xóa tất cả các tệp git khỏi một thư mục?
- 27. làm thế nào để liệt kê tất cả các thư mục con trong một thư mục
- 28. rsync loại trừ một thư mục nhưng bao gồm một thư mục con
- 29. NSIS - Cách bao gồm tất cả các thư mục từ nguồn đến Trình cài đặt
- 30. Mở tất cả các tệp trong một thư mục
này đã được hỏi: http://stackoverflow.com/questions/837606/find-the-oldest-file-recursively-in- a-directory, cũng như một vài thư mục khác (tìm kiếm 'Python walk' trong hộp tìm kiếm) –