За да получите списък с имена на файлове и директории (имена на папки) в Python, използвайте функцията os.listdir() на модула os.
os.listdir(path='.')
Връща списък, съдържащ имената на записи в директорията, зададена от path.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Модулът os е включен в стандартната библиотека и не е необходимо да се инсталира. Изисква се обаче „import“.
Тук се предоставя следната информация.
- Получаване на списък с имена на файлове и директории.
- Получаване на списък само с имена на файлове
- Получаване на списък само с имена на директории
По-долу е даден пример за структура на файл (директория).
. └── testdir ├── dir1 ├── dir2 ├── file1 ├── file2.txt └── file3.jpg
В допълнение към os.listdir() можете да използвате и модула glob, за да получите списък с имена на файлове и директории (имена на папки). glob ви позволява да задавате условия, като използвате заместващи символи (*) и т.н., и да включвате рекурсивно поддиректории.
В Python 3.4 и по-нови версии е възможно да се получи списък с файлове и директории с помощта на модула pathlib, който може да манипулира пътищата като обекти. Подобно на globs по-горе, той също може да се използва условно и рекурсивно.
Получаване на списък с имена на файлове и директории.
Ако използвате os.listdir() както е, тя ще върне списък с имена на файлове и директории.
import os path = "./testdir" files = os.listdir(path) print(type(files)) # <class 'list'> print(files) # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']
Това, което ще получите, е списък с низове на пътища.
Получаване на списък само с имена на файлове
Ако искате да получите списък само с имена на файлове, използвайте функцията os.path.isfile(), за да определите дали пътят е файл. подаването само на името на файла като аргумент на функцията os.path.isfile() няма да работи, затова подайте пълния път, както е показано по-долу.os.path.isfile(os.path.join(path, f))
files = os.listdir(path) files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] print(files_file) # ['file1', 'file2.txt', 'file3.jpg']
Получаване на списък само с имена на директории
Ако искате да получите само списък с имена на директории, използвайте os.path.isdir() по същия начин.
files = os.listdir(path) files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))] print(files_dir) # ['dir1', 'dir2']