В этом посте будет обсуждаться, как перебирать файлы в каталоге в Python.
1. Использование os.listdir()
функция
Простое решение для перебора файлов в каталоге — использование os.listdir()
функция. Он возвращает список файлов и подкаталогов, присутствующих в указанном каталоге. Чтобы получить только файлы, вы можете отфильтровать список с помощью os.path.isfile()
функция:
1 2 3 4 5 6 7 8 |
import os directory = 'path/to/dir' for filename in os.listdir(directory): f = os.path.join(directory, filename) if os.path.isfile(f): print(f) |
Чтобы получить файлы определенного расширения, скажите .txt
, вы можете добавить условие для проверки расширения файла.
1 2 3 4 5 6 7 8 |
import os directory = 'path/to/dir' for filename in os.listdir(directory): f = os.path.join(directory, filename) if os.path.isfile(f) and filename.endswith('.txt'): print(f) |
2. Использование os.scandir()
функция
Начиная с Python 3.5, рассмотрите возможность использования os.scandir()
функция, когда вам нужна информация о типе файла или атрибуте файла. Он возвращает записи каталога и информацию об атрибутах файла, обеспечивая значительно более высокую производительность по сравнению с os.listdir()
.
1 2 3 4 5 6 7 8 |
import os directory = 'path/to/dir' for entry in os.scandir(directory): if entry.is_file() and entry.name.endswith('.txt'): print(entry.path) |
3. Использование pathlib
модуль
В Python 3.4 вы также можете использовать pathlib
модуль. Чтобы перебрать файлы в каталоге, используйте Path.glob(pattern)
функция, которая размещает заданный относительный шаблон в указанном каталоге и дает соответствующие файлы.
В следующем примере показано, как фильтровать и отображать текстовые файлы, находящиеся в каталоге.
1 2 3 4 5 6 7 |
from pathlib import Path directory = 'path/to/dir' pathlist = Path(directory).glob('*.txt') for path in pathlist: print(path) |
В качестве альтернативы вы можете использовать Path.iterdir()
функция, которая возвращает объекты пути содержимого каталога. Чтобы получить расширение файла, используйте suffix
имущество:
1 2 3 4 5 6 7 8 |
from pathlib import Path directory = 'path/to/dir' for path in Path(directory).iterdir(): if path.is_file() and path.suffix == '.txt': print(path) |
4. Использование os.walk()
функция
Если вам нужно также искать подкаталоги, рассмотрите возможность использования os.walk()
функция. Это дает 3-кортеж (dirpath, dirnames, filenames)
для всего, что доступно из указанного каталога, где dirpath
это путь к каталогу, dirnames
это список имен подкаталогов в dirpath, и filenames
представляет собой список имен файлов, не входящих в каталоги, в каталоге dirpath.
1 2 3 4 5 6 7 8 9 |
import os directory = 'path/to/dir' for root, dirs, files in os.walk(directory): for file in files: if file.endswith('.txt'): print(os.path.join(root, file)) |
Начиная с Python 3.5, os.walk()
звонки os.scandir()
вместо os.listdir()
, что делает его быстрее за счет уменьшения общего количества вызовов os.stat()
.
5. Использование glob
модуль
Наконец, вы можете использовать glob.iglob
функция, которая возвращает итератор по списку путей, соответствующих указанному шаблону.
1 2 3 4 5 6 7 |
import glob directory = 'path/to/dir' for path in glob.iglob(f'{directory}/*.txt'): print(path) |
Расширенная поддержка Python версии 3.5 для рекурсивных глобусов с использованием **
что позволяет вам искать подкаталоги и символические ссылки на каталоги.
1 2 3 4 5 6 7 |
import glob directory = 'path/to/dir' for path in glob.iglob(f'{directory}/**/*.txt', recursive=True): print(path) |
Это все, что касается перебора файлов в каталоге в Python.