Làm thế nào tôi có thể liệt kê nội dung của một thư mục trong Python?


Câu trả lời:



52

Một chiều:

import os
os.listdir("/home/username/www/")

Một cách khác :

glob.glob("/home/username/www/*")

Ví dụ được tìm thấy ở đây .

Các glob.globphương pháp trên sẽ không liệt kê các tập tin ẩn.

Vì ban đầu tôi đã trả lời câu hỏi này nhiều năm trước, pathlib đã được thêm vào Python. Cách ưa thích của tôi để liệt kê một thư mục bây giờ thường liên quan đến iterdirphương thức trên Pathcác đối tượng:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

Toàn cầu sẽ liệt kê các tệp ẩn (tôi giả sử bạn có nghĩa là .XYZcác tệp trong ngữ cảnh hệ thống tệp Unix), khi được sử dụng với glob.glob("/home/username/www/.*")?
Andy Finkenstadt

Có, tôi có nghĩa là các tập tin bắt đầu bằng một dấu chấm. Ví dụ bạn đưa ra sẽ hoạt động để khớp các tệp ẩn (và chỉ các tệp ẩn).
Trey Hunner

Tôi vừa nhập toàn cầu và đã sử dụng global.glob (r'c: \ users ') nhưng nó chỉ được trả lại['c:\\users']
Musixauce3000

1
@ Musixauce3000: Bạn sẽ muốn làm glob.glob(r'c:\users\*')(toàn cầu nó không thực sự liệt kê các thư mục, nhưng mở rộng các dấu sao và như vậy sẽ hoàn thành một nhiệm vụ tương tự).
Trey Hunner

38

os.walk có thể được sử dụng nếu bạn cần đệ quy:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)

18

glob.globhoặc os.listdirsẽ làm điều đó.


import globENTER glob.glob(r'c:\users')ENTER dường như chỉ trở lại ['c:\\users']. Tại sao vậy? Tôi muốn sử dụng global.glob vì như những người dùng khác đã chỉ ra, nó được cho là trả về nội dung của một thư mục đồng thời bỏ qua các tệp ẩn. Điều này quan trọng.
Musixauce3000

bởi vì bạn phải chỉ định một ký tự đại diện với glob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

Các osmô-đun xử lý tất cả những thứ đó.

os.listdir(path)

Trả về một danh sách chứa tên của các mục trong thư mục được cung cấp bởi đường dẫn. Danh sách theo thứ tự tùy ý. Nó không bao gồm các mục đặc biệt '.' và '..' ngay cả khi chúng có trong thư mục.

Sẵn có: Unix, Windows.


4

Trong Python 3.4+, bạn có thể sử dụng pathlibgói mới :

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()trả về một iterator, có thể dễ dàng biến thành list:

contents = list(Path('.').iterdir())

3

Kể từ Python 3.5, bạn có thể sử dụng os.scandir .

Sự khác biệt là nó trả về các mục nhập tệp không phải tên. Trên một số HĐH như windows, điều đó có nghĩa là bạn không cần phải os.path.isdir/filebiết đó có phải là tệp hay không và điều đó giúp tiết kiệm thời gian của CPU vì statđã được thực hiện khi quét dir trong Windows:

ví dụ để liệt kê một thư mục và in các tệp lớn hơn max_valuebyte:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(đọc câu trả lời dựa trên hiệu suất rộng rãi của tôi ở đây )


2

Dưới đây mã sẽ liệt kê các thư mục và các tập tin trong thư mục. Một cái khác là os.walk

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.