Рубрики
Без рубрики

Как перечислить файлы в каталоге с помощью Python?

В этом руководстве мы покрываем все, что вам нужно знать о том, как перечислить файлы в каталоге с помощью Python.

Автор оригинала: Pankaj Kumar.

Как перечислить файлы в каталоге с помощью Python?

В этом руководстве мы покрываем все, что вам нужно знать о том, как перечислить файлы в каталоге с помощью Python.

Python – это язык общего назначения, используемый в различных областях, таких как наука о данных, обучение машине и даже в веб-разработке. Кажется, нет никаких ограничений в применении языка Python.

Следовательно, кажется, что довольно тривиальный Python можно использовать для перечисления файлов и каталогов в любой системе. Целью данной статьи является освещение читателя о способах перечисления файлов в системе с помощью Python.

Перечислите все файлы в каталоге с помощью Python

С целью взаимодействия с каталогами в системе с использованием Python, ОС библиотека используется.

1. Использование библиотеки «ОС»

Способ, который мы собираемся осуществлять для нашего мотива, это listdir (). Как следует из названия, он используется для списка элементов в каталогах.

# Importing the os library
import os

# The path for listing items
path = '.'

# The list of items
files = os.listdir(path)

# Loop to print each filename separately
for filename in files:
	print(filename)

Выход:

game_file.py
hi-lo_pygame.py
Journaldev
list_files1.py
hi_lo_pygame.mp4
test.py
list_files.py
my_program.cpp
a.out
cut.cpp

Пользователи Linux могут легко сопоставить вышеуказанный вывод, используя стандарт Ls Команда на терминале.

Список файлов Python Ls

Как мы можем видеть выходы каждого метода совпадения.

2. Использование библиотеки «Глоба»

шаблон В основном в основном библиотека сопоставления шаблона имени файла, но его можно использовать для списка элементов в текущем каталоге по:

# Importing the glob library
import glob 

# Path to the directory
path = ''

# or 
# path = './'

# Extract the list of filenames
files = glob.glob(path + '*', recursive=False)

# Loop to print the filenames
for filename in files:
	print(filename)

Выход:

game_file.py
hi-lo_pygame.py
Journaldev
list_files1.py
hi_lo_pygame.mp4
test.py
list_files.py
my_program.cpp
a.out
cut.cpp

Персонаж подстановки '*' используется для соответствия всех элементах в текущем каталоге. Поскольку мы хотим отобразить элементы текущего каталога, нам нужно отключить рекурсивный характер Глобус () функция.

3. Перечислите только файлы в текущем каталоге

В приведенных выше способах код Python возвращает все элементы в текущем каталоге независимо от их характера. Мы можем извлечь только файлы, используя path.isfile () Функция внутри ОС библиотека.

# Importing the os library
import os

# The path for listing items
path = '.'

# List of only files
files = [f for f in os.listdir(path) if os.path.isfile(f)]

# Loop to print each filename separately
for filename in files:
	print(filename)

Выход:

game_file.py
hi-lo_pygame.py
list_files1.py
hi_lo_pygame.mp4
test.py
list_files.py
my_program.cpp
a.out
cut.cpp

В приведенном выше фрагменте кода отображение списка используется для отфильтровывания только те элементы, которые на самом деле являются файлом.

Еще одно ключевое, что следует отметить, что вышеуказанный код не работает для других каталогов в качестве переменной 'f' не является абсолютным путем, а относительный путь к текущему каталогу.

Перечислите все файлы в каталоге рекурсивно

Чтобы распечатать файлы внутри каталога и его подкаталоги, нам нужно пересекать их рекурсивно.

1. Использование библиотеки «ОС»

С помощью прогулка () Метод, мы можем пройти каждый подкаталог в каталоге один за другим.

# Importing the os library
import os

# The path for listing items
path = './Documents/'

# List of files in complete directory
file_list = []

"""
	Loop to extract files inside a directory

	path --> Name of each directory
	folders --> List of subdirectories inside current 'path'
	files --> List of files inside current 'path'

"""
for path, folders, files in os.walk(path):
	for file in files:
		file_list.append(os.path.join(path, file))

# Loop to print each filename separately
for filename in file_list:
	print(filename)

Выход:

./Documents/game_file.py
./Documents/hi-lo_pygame.py
./Documents/list_files1.py
./Documents/hi_lo_pygame.mp4
./Documents/test.py
./Documents/list_files.py
./Documents/my_program.cpp
./Documents/a.out
./Documents/cut.cpp
./Documents/Journaldev/mastermind.py
./Documents/Journaldev/blackjack_terminal.py
./Documents/Journaldev/lcm.cpp
./Documents/Journaldev/super.cpp
./Documents/Journaldev/blackjack_pygame.py
./Documents/Journaldev/test.java

Os.walk () Метод просто следует за каждым подкаталогом и извлекать файлы в сверху вниз по умолчанию. Есть три итераторы, используемые для прохода через выход Os.walk () Функция:

  • путь – эта переменная содержит настоящий каталог, функция наблюдает во время определенной итерации
  • Папки – Эта переменная – список каталогов внутри «Путь» каталог.
  • Файлы – список файлов внутри «Путь» каталог.

Присоединяйтесь () Способ используется для объединения имени файла со своим родительским каталогом, предоставляя нам относительный путь к файлу.

2. Использование библиотеки «Глоба»

Похож на вышеуказанную процедуру, шаблон Может рекурсивно посещать каждый каталог и извлекать все элементы и вернуть их.

# Importing the glob library
import glob 

# Importing the os library
import os

# Path to the directory
path = './Documents/'

# Extract all the list of items recursively
files = glob.glob(path + '**/*', recursive=True)

# Filter only files
files = [f for f in files if os.path.isfile(f)]

# Loop to print the filenames
for filename in files:
	print(filename)

Выход:

./Documents/game_file.py
./Documents/hi-lo_pygame.py
./Documents/list_files1.py
./Documents/hi_lo_pygame.mp4
./Documents/test.py
./Documents/list_files.py
./Documents/my_program.cpp
./Documents/a.out
./Documents/cut.cpp
./Documents/Journaldev/mastermind.py
./Documents/Journaldev/blackjack_terminal.py
./Documents/Journaldev/lcm.cpp
./Documents/Journaldev/super.cpp
./Documents/Journaldev/blackjack_pygame.py
./Documents/Journaldev/test.java

'**' Символ, используемый вместе с переменной пути, рассказывает Глобус () Функция для соответствия файлам в любом подкаталоге. '*' Сообщает функцию совпадать со всеми элементами в каталоге.

Поскольку мы хотим извлечь только файлы в полном каталоге, мы отфиляем файлы, используя Isfile () Функция используется ранее.

Перечислите все подкаталогии внутри каталога

Вместо листинга файлов мы можем перечислить все подкаталоги, присутствующие в определенном каталоге.

# Importing the os library
import os

# The path for listing items
path = './Documents/'

# List of folders in complete directory
folder_list = []

"""
	Loop to extract folders inside a directory

	path --> Name of each directory
	folders --> List of subdirectories inside current 'path'
	files --> List of files inside current 'path'

"""
for path, folders, files in os.walk(path):
	for folder in folders:
		folder_list.append(os.path.join(path, folder))

# Loop to print each foldername separately
for foldername in folder_list:
	print(foldername)

Выход:

./Documents/Journaldev

Незначительное различие между листинговыми файлами и каталогами – это выбор итератора в процессе Os.walk () функция. Для файлов мы повторяем переменную файлов. Здесь мы вентилируем переменную папки.

Список файлов в каталоге с абсолютным путем

Как только мы узнаем, как перечислить файлы в каталоге, затем отображение абсолютного пути – это кусок пирога. ABSPATH () Способ предоставляет нам абсолютный путь для файла.

# Importing the os library
import os

# The path for listing items
path = './Documents/'

# List of files in complete directory
file_list = []

"""
	Loop to extract files inside a directory

	path --> Name of each directory
	folders --> List of subdirectories inside current 'path'
	files --> List of files inside current 'path'

"""
for path, folders, files in os.walk(path):
	for file in files:
		file_list.append(os.path.abspath(os.path.join(path, file)))

# Loop to print each filename separately
for filename in file_list:
	print(filename)

Выход:

/home/aprataksh/Documents/game_file.py
/home/aprataksh/Documents/hi-lo_pygame.py
/home/aprataksh/Documents/list_files1.py
/home/aprataksh/Documents/hi_lo_pygame.mp4
/home/aprataksh/Documents/test.py
/home/aprataksh/Documents/list_files.py
/home/aprataksh/Documents/my_program.cpp
/home/aprataksh/Documents/a.out
/home/aprataksh/Documents/cut.cpp
/home/aprataksh/Documents/Journaldev/mastermind.py
/home/aprataksh/Documents/Journaldev/blackjack_terminal.py
/home/aprataksh/Documents/Journaldev/lcm.cpp
/home/aprataksh/Documents/Journaldev/super.cpp
/home/aprataksh/Documents/Journaldev/blackjack_pygame.py
/home/aprataksh/Documents/Journaldev/test.java

Одно следует отметить вот что ABSPATH () должен быть предоставлен относительный путь файла, и это цель Присоединяйтесь () функция.

Перечислите файлы в каталоге, соответствующие шаблонам

Существуют несколько способов отфильтровать имена файлов, соответствующих определенному рисунку. Давайте пройдем каждый из них один за другим.

1. Используя библиотеку «FNMATCH»

Как указано имя, fnmatch Библиотека соответствующей библиотеке имени файла шаблона. Использование fnmatch С нашим стандартным библиотеками извлечения имени файла мы можем отфильтровать эти файлы, соответствующие определенному шаблону.

# Importing the os and fnmatch library
import os, fnmatch

# The path for listing items
path = './Documents/'

# List of files in complete directory
file_list = []

"""
	Loop to extract files containing word "file" inside a directory

	path --> Name of each directory
	folders --> List of subdirectories inside current 'path'
	files --> List of files inside current 'path'

"""
print("List of files containing \"file\" in them")
for path, folders, files in os.walk(path):
	for file in files:
		if fnmatch.fnmatch(file, '*file*'):
			file_list.append(os.path.join(path, file))

# Loop to print each filename separately
for filename in file_list:
	print(filename)

Выход:

List of files containing "file" in them
./Documents/game_file.py
./Documents/list_files1.py
./Documents/list_files.py

fnmatch () Функция принимает два параметра, имя файла, сопровождаемое шаблоном для сопоставления. В приведенном выше коде мы смотрим на все файлы, содержащие слово Файл в них.

2. Использование библиотеки «Глоба»

Как мы упоминали ранее, Глобай Основная цель – сопоставление шаблона имени файла.

# Importing the glob library
import glob 

# Importing the os library
import os

# Path to the directory
path = './Documents/'

# Extract items containing numbers in name
files = glob.glob(path + '**/*[0-9]*.*', recursive=True)

# Filter only files
files = [f for f in files if os.path.isfile(f)]

# Loop to print the filenames
for filename in files:
	print(filename)

Выход:

./Documents/list_files1.py

Вышеуказанный шаблон соответствует регулярное выражение '**/* [0-9] *. *' можно объяснить как:

  • ‘**’ – Проверьте все подкаталоги внутри пути
  • ‘/*’ – Имя файла может начинаться с любого символа
  • «[0-9] ‘ – содержит номер в его имени файла
  • ‘*. *’ – Имя файла может закончиться любым символом и может иметь любое расширение

3. Использование библиотеки «PATHLIB»

pathlib следует объектно-ориентированному способу взаимодействия с файловой системой. RGLOB () Функция внутри библиотеки можно использовать для рекурсически извлечения списка файлов через определенный объект пути.

Эти список файлов можно отфильтровать с помощью шаблона в RGLOB () функция.

# Importing the pathlib library
import pathlib

# Creating a Path object
path = pathlib.Path('./Documents/')

# Extracting a list of files starting with 'm'
files = path.rglob('m*')

# Loop to print the files separately
for file in files:
	print(file)

Выход:

Documents/my_program.cpp
Documents/Journaldev/mastermind.py

Приведенный выше фрагмент кода используется для перечисления всех файлов, начиная с буквы «М» Отказ

Список файлов в каталоге с определенным расширением

Листинг файлов с определенным расширением в Python несколько похож на сопоставление шаблона. Для этого нам нужно создать шаблон относительно расширения файла.

# Importing the os and fnmatch library
import os, fnmatch

# The path for listing items
path = './Documents/'

# List to store filenames 
file_list = []

"""
	Loop to extract python files 

	path --> Name of each directory
	folders --> List of subdirectories inside current 'path'
	files --> List of files inside current 'path'

"""
print("List of python files in the directory:")
for path, folders, files in os.walk(path):
	for file in files:
		if fnmatch.fnmatch(file, '*.py'):
			file_list.append(os.path.join(path, file))

# Loop to print each filename separately
for filename in file_list:
	print(filename)

Выход:

List of python files in the directory:
./Documents/game_file.py
./Documents/hi-lo_pygame.py
./Documents/list_files1.py
./Documents/test.py
./Documents/list_files.py
./Documents/Journaldev/mastermind.py
./Documents/Journaldev/blackjack_terminal.py
./Documents/Journaldev/blackjack_pygame.py

fnmatch () Функция фильтрует эти файлы, заканчивающиеся '.py' это файлы Python. Если мы хотим извлечь файлы с различными расширениями, то мы должны изменить эту часть кода. Например, чтобы получить только файлы C ++, '.cpp' ' должны быть использованы.

Это суммирует способы получения списка файлов в каталоге с помощью Python.

Заключение

Может быть несколько способов решить любую проблему под рукой, а наиболее удобным не всегда ответ. Что касается этой статьи, программист Python должен знать все возможное, что мы можем перечислены файлы в каталоге.

Мы надеемся, что эта статья была легко следовать. Не стесняйтесь комментировать ниже для любых запросов или предложений.