Як я можу перерахувати вміст каталогу в Python?


Відповіді:



52

Односторонній:

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

Інший спосіб :

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

Тут можна знайти приклади .

У glob.globнаведеному вище способі не буде перераховано приховані файли.

Оскільки я спочатку відповів на це питання багато років тому, pathlib був доданий до Python. Мій кращий спосіб перерахування каталогу зараз зазвичай включає iterdirметод на Pathоб'єктах:

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

Чи буде glob.glob перераховувати приховані файли (я вважаю, що ви маєте на увазі .XYZфайли в контексті файлової системи Unix), коли використовується з glob.glob("/home/username/www/.*")?
Енді Фінкенштадт

Так, я маю на увазі файли, що починаються з крапки. Приклад, який ви подали, буде працювати для відповідності прихованих файлів (і лише прихованих файлів).
Мисливець на Трей

Я щойно імпортував глобус і використовував glob.glob (r'c: \ users '), але він лише повернувся['c:\\users']
Musixauce3000

1
@ Musixauce3000: Ви хочете це зробити glob.glob(r'c:\users\*')(глобус насправді не перераховує каталоги, але розширює зірочки і такі, що виконує подібне завдання).
Мисливець Трей

38

os.walk можна використовувати, якщо вам потрібна рекурсія:

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.globабо os.listdirзроблять це.


import globВхід glob.glob(r'c:\users')ENTER лише здається повертається ['c:\\users']. Чому так? Я хотів би використовувати glob.glob, оскільки, як вказували інші користувачі, він нібито повертає вміст каталогу, одночасно ігноруючи приховані файли. Це важливо.
Musixauce3000

тому що вам слід вказати підстановку з glob:glob.glob(r'c:\users\*')
Жан-Франсуа Фабре

14

У osмодулі ручки все інше.

os.listdir(path)

Поверніть список, що містить імена записів у каталозі, заданому шляхом. Список складається у довільному порядку. Він не включає спеціальні записи "." та "..", навіть якщо вони є в каталозі.

Наявність: Unix, Windows.


4

У Python 3.4+ ви можете використовувати новий pathlibпакет:

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

Path.iterdir()повертає ітератор, який можна легко перетворити на list:

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

3

Оскільки Python 3.5 ви можете використовувати os.scandir.

Різниця полягає в тому, що він повертає записи файлів, а не імена. У деяких ОС, таких як Windows, це означає, що вам не потрібно os.path.isdir/fileзнати, чи це файл чи ні, і це економить час процесора, оскільки statце вже робиться під час сканування dir у Windows:

Приклад для переліку каталогу та друку файлів, більших за max_valueбайти:

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

(читайте про мій розгорнутий мій відповідь тут )


2

Нижче наведено список каталогів та файлів у режимі dir. Інший - 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.