Hướng dẫn python os.scandir recursive - python os.scandir đệ quy

Đã hỏi 6 năm, 11 tháng trước 6 years, 11 months ago

Đã xem 40k lần 40k times

Hàm os.scandir[path] của Python 3.5 trả về các đối tượng Direntry nhẹ rất hữu ích với thông tin về các tệp. Tuy nhiên, nó chỉ hoạt động cho con đường ngay lập tức được trao cho nó. Có cách nào để bọc nó trong một hàm đệ quy để nó truy cập tất cả các thư mục con bên dưới đường dẫn đã cho không?

Ben Hoyt

10,3K5 Huy hiệu vàng56 Huy hiệu bạc84 Huy hiệu đồng5 gold badges56 silver badges84 bronze badges

Hỏi ngày 14 tháng 10 năm 2015 lúc 20:31Oct 14, 2015 at 20:31

1

Bạn có thể quét đệ quy bằng cách sử dụng os.walk[] hoặc nếu bạn cần đối tượng DirEntry hoặc kiểm soát nhiều hơn, hãy viết một hàm đệ quy như scantree[] bên dưới:

try:
    from os import scandir
except ImportError:
    from scandir import scandir  # use scandir PyPI module on Python < 3.5

def scantree[path]:
    """Recursively yield DirEntry objects for given directory."""
    for entry in scandir[path]:
        if entry.is_dir[follow_symlinks=False]:
            yield from scantree[entry.path]  # see below for Python 2.x
        else:
            yield entry

if __name__ == '__main__':
    import sys
    for entry in scantree[sys.argv[1] if len[sys.argv] > 1 else '.']:
        print[entry.path]

Notes:

  • Có một vài ví dụ nữa trong PEP 471 và trong tài liệu Os.Scandir [].
  • Bạn cũng có thể thêm logic khác nhau trong vòng lặp For để bỏ qua các thư mục hoặc tệp bắt đầu bằng '.' và loại đó.
  • Bạn thường muốn follow_symlinks=false trên các cuộc gọi is_dir[] trong các chức năng đệ quy như thế này, để tránh các vòng lặp Symlink.
  • Trên Python 2.x, thay thế dòng yield from bằng:

    for entry in scantree[entry.path]:
        yield entry
    

Đã trả lời ngày 14 tháng 10 năm 2015 lúc 20:38Oct 14, 2015 at 20:38

Ben Hoytben HoytBen Hoyt

10,3K5 Huy hiệu vàng56 Huy hiệu bạc84 Huy hiệu đồng5 gold badges56 silver badges84 bronze badges

7

Hỏi ngày 14 tháng 10 năm 2015 lúc 20:31

Bạn có thể quét đệ quy bằng cách sử dụng os.walk[] hoặc nếu bạn cần đối tượng DirEntry hoặc kiểm soát nhiều hơn, hãy viết một hàm đệ quy như scantree[] bên dưới:

Có một vài ví dụ nữa trong PEP 471 và trong tài liệu Os.Scandir [].

Bạn cũng có thể thêm logic khác nhau trong vòng lặp For để bỏ qua các thư mục hoặc tệp bắt đầu bằng '.' và loại đó.

Bạn thường muốn follow_symlinks=false trên các cuộc gọi is_dir[] trong các chức năng đệ quy như thế này, để tránh các vòng lặp Symlink.

Trên Python 2.x, thay thế dòng yield from bằng:

Đã trả lời ngày 14 tháng 10 năm 2015 lúc 20:38

Ben Hoytben Hoyt

Python có dễ dàng hơn cho các cuộc phỏng vấn không?

Sau đây dựa trên kiến ​​thức/kỹ năng/sự thoải mái của tôi [hoặc thiếu nó] trái ngược với phẩm chất vốn có của các ngôn ngữ. Tại sao Python? Nó giống như giả giống như Java. Dễ dàng hơn để bắt đầu mã hóa ...

Chuỗi hướng dẫn python sau chỉ mục

### GIỚI THIỆU Kiểu dữ liệu chuỗi Python là một chuỗi được tạo thành từ một hoặc nhiều ký tự riêng lẻ có thể bao gồm các chữ cái, số, ký tự trắng hoặc ký hiệu. Bởi vì một chuỗi là ...

Chức năng radian trong Python là gì?

Phương pháp toán họcSexampleConvert các mức độ khác nhau vào radians: # Nhập thư viện toán học MATH # Chuyển đổi các mức độ khác nhau thành radiansprint [math.radians [180]] in [Math.radians [100.03]] ...

Vẽ hai biến trong python matplotlib

Mô -đun matplotlib.pyplot tạo ra một đối tượng hình và trục [xem trợ giúp [plt.subplots] để biết chi tiết] có thể được sử dụng để tạo một biểu đồ theo yêu cầu: Nhập matplotlib.pyplot như PLT # áp dụng liên quan ...

Làm cách nào để chuyển đổi thời gian thành chuỗi trong Python?

Phương thức strftime [] trả về một chuỗi đại diện cho ngày và thời gian bằng cách sử dụng đối tượng ngày, giờ hoặc datetime. Ví dụ 1: DateTime thành chuỗi bằng cách sử dụng strftime [] Chương trình bên dưới chuyển đổi đối tượng DateTime ...

Làm thế nào để bạn làm tròn đến 2 số thập phân trong Python?

Bạn muốn làm tròn câu trả lời của mình.Round [giá trị, đáng kể Digigit] là giải pháp thông thường để làm điều này, tuy nhiên điều này đôi khi không hoạt động như người ta mong đợi từ góc độ toán học khi chữ số ...

Chương trình Fibonacci sử dụng đệ quy trong Python

Trình tự Fibonacci là chuỗi số nguyên là 0, 1, 1, 2, 3, 5, 8 .... Hai thuật ngữ đầu tiên là 0 và 1. Tất cả các thuật ngữ khác có được bằng cách thêm hai thuật ngữ trước đó. Thuật ngữ thứ n ...

Trong xuống dâmng trong python

HÃY NHớ LạI ĐOạN MÃ CủA CHươNG TRÌNH

Làm thế nào để luồng hoạt động trong Python?

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Xây dựng trong Pythonpython Threading ...

Làm thế nào để bạn làm tròn trong Python?

Đối với những người không muốn sử dụng nhập khẩu. Đối với một danh sách đã cho hoặc bất kỳ số nào: x = [2, 2.1, 2.5, 3, 3.1, 3.5, 2.499.2.499999999, 3.49999999.3.99999999] ...

Làm cách nào để chạy thử nghiệm Python trong thiết bị đầu cuối?

Mã nguồn: lib/unittest/__ init __.

Danh sách Ghép 2 Trong Python

Nhập itertools a = list [zip [[1,3,5,7,9], [2,4,6,8,10]]] b = [1,3,5,7,9]+[2, 4,6,8,10] c = list [set [[1,3,5,7,9] + [2,4,6,8,10]]] d = [1,3,5,7, 9] D.Append [[2,4,6,8,10]] e = ...

Hướng dẫn python file open unicode

You have stumbled over the general problem with encodings: How can I tell in which encoding a file is?Nội dung chínhOpening and Closing a File ObjectReading from a FileWriting to a FileCommon ...

Hướng dẫn dịch ngược python

Python là một ngôn ngữ mạnh, hỗ trợ nhiều, cực kì nhiều thư viện, thường dùng để deploy nhanh ứng dụng. Sau khi viết xong 1 file python, ta có thể sử dụng ...

Python add property to object

I want to create a dynamic object [inside another object] in Python and then add attributes to it.I tried:obj = someobject obj.a = object[] setattr[obj.a, somefield, somevalue] but this didnt ...

Hướng dẫn dùng python courses python

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là ...

Hướng dẫn rotate python

The rotation of a list has been discussed earlier also, but this particular article focuses on shorthands and various short techniques to achieve this in one-liners or one word. This operation is ...

Hướng dẫn python latest version

Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax ...

Hướng dẫn dùng dump definition python

Nội dung chínhNội dung chínhGiới thiệu về JSONVí dụ về Import JSON, khai báo, đọc và in dữ liệu JSON bằng PythonVí dụ về ghi dữ liệu JSON trong PythonVí dụ ...

Hướng dẫn python switch

Đã đăng vào thg 3 22, 2019 8:46 SA 1 phút đọc 1 Giới thiệu.Khi mình tìm hiểu python ta đã thấy một điều quái lạ là vì sao python không định nghĩa các function ...

Vscode generate getters and setters python

This is my class called manager I want to generate automatically getter and setter in python vs code.class Manager: def __init__[self, name, salary, bonus]: self.bonus = bonus ...

Hướng dẫn dùng python ide python

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là ...

Hướng dẫn rotate python

The rotation of a list has been discussed earlier also, but this particular article focuses on shorthands and various short techniques to achieve this in one-liners or one word. This operation is ...

Hướng dẫn python latest version

Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax ...

Hướng dẫn dùng dump definition python

Nội dung chínhNội dung chínhGiới thiệu về JSONVí dụ về Import JSON, khai báo, đọc và in dữ liệu JSON bằng PythonVí dụ về ghi dữ liệu JSON trong PythonVí dụ ...

Hướng dẫn python switch

Đã đăng vào thg 3 22, 2019 8:46 SA 1 phút đọc 1 Giới thiệu.Khi mình tìm hiểu python ta đã thấy một điều quái lạ là vì sao python không định nghĩa các function ...

Vscode generate getters and setters python

This is my class called manager I want to generate automatically getter and setter in python vs code.class Manager: def __init__[self, name, salary, bonus]: self.bonus = bonus ...

Chủ Đề