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

Файлы списка Python в руководстве каталогов – Listdir VS System («LS»), объясненные примерами

Автор оригинала: Estefania Cassingena Navone.

🔹 Добро пожаловать

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

Мы начнем с погружения в концепции, которые необходимы для работы с listdir и Система :

  • Встроенный Python ОС Модуль и как его импортировать.
  • Концепции «Справочника» и «текущий рабочий каталог».
  • Как проверить и изменить текущий рабочий каталог.
  • Разница между абсолютным путем и относительным путем.

Затем мы погрузимся в сами функции:

  • Как работать с listdir функция и когда его использовать.
  • Как работать с Система («LS») функция и когда его использовать.
  • Примеры их обоих и как они работают за кулисами.

Давайте начнем! ⭐.

🔸 модуль ОС

Две функции, которые мы обсудим: listdir () и Система () принадлежать к ОС модуль. Этот модуль включает в себя функции, которые используются для взаимодействия с вашей операционной системой, выполняющие действия, такие как:

  • Создание нового каталога.
  • Переименовав существующий каталог.
  • Удаление каталога.
  • Отображение пути к вашему текущему рабочему каталогу.
  • Гораздо более!

💡 Советы:

  • А каталог Это то, что мы обычно знаем как «папка», где обычно мы храним связанные файлы и/или другие каталоги, создавая иерархию каталогов в каталогах, которые называются подкаталогиями. Примером каталога является ваша папка «Документы».
  • А модуль это файл, который содержит связанный код Python.

Как импортировать модуль ОС

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

Импортировать ОС Модуль, вам просто нужно включить эту строку в верхней части скрипта Python или запустить эту строку в интерактивной оболочке:

import os

Это даст вам доступ ко всем функциям, определенным в ОС модуль.

💡 Совет: Этот модуль уже был установлен при установке Python 3, поэтому вы сможете использовать его немедленно.

Чтобы иметь возможность использовать функции из ОС Модуль, вам нужно будет добавить префикс Операционные системы. Перед именем функции, которую вы хотите позвонить, как это:

os.()

Например:

os.mkdir("New Folder")

Как импортировать отдельные функции

Если вы собираетесь работать только с одним или двумя функциями из модуля, вы можете импортировать их индивидуально, используя этот синтаксис:

from  import , , ...

Например:

from os import listdir, system

В этом случае вы можете позвонить в функции в вашем сценарии, как вы обычно, без Добавление Операционные системы. Префикс, как это:

()

Например:

mkdir("New Folder")

🔹 Текущий рабочий каталог

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

Вы можете проверить свой текущий рабочий каталог с этой функцией из ОС Модуль:

os.getcwd()

Это покажет вам путь к вашему текущему рабочему каталогу.

💡 Совет: CWD означает «текущий рабочий каталог».

От интерактивной оболочки

Если я запускаю эту команду в интерактивной оболочке (Windows), я вижу это:

>>> os.getcwd()
'C:\\Users\\estef\\AppData\\Local\\Programs\\Python\\Python38-32'

Это полный путь к моему текущему рабочему каталогу:

'C:\\Users\\estef\\AppData\\Local\\Programs\\Python\\Python38-32'

Из скрипта

Если я запускаю эту команду из скрипта, как это:

import os
print(os.getcwd())

Я понимаю:

C:\Users\estef\Documents\freeCodeCamp\freeCodeCamp News\listdir vs system

Полный путь к скрипту (его местоположение в системе, в иерархии каталогов).

💡 Совет: Если вы запускаете скрипт (файл Python), ваш текущий рабочий каталог является каталогом, в котором в настоящее время скрипт.

Как изменить текущий рабочий каталог

Вы можете изменить свой текущий рабочий каталог с этой командой из ОС Модуль:

os.chdir()

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

💡 Кончик:

  • Абсолютный путь Указывает всю последовательность каталогов, которые вам нужно пройти, чтобы добраться до вашего целевого каталога. Этот путь начинается из корневого каталога вашей системы.

Например:

>>> import os
>>> os.chdir(r"C:\Users\estef\Documents\FreeCodeCamp\freeCodeCamp News\9 - listdir vs system")

# Checking current working directory:
>>> os.getcwd()
'C:\\Users\\estef\\Documents\\FreeCodeCamp\\freeCodeCamp News\\9 - listdir vs system'

Обратите внимание, что я добавил R до абсолютного пути для преобразования строки в сырую строку. Если вы используете \ И вы не добавляете R , вы получите ошибку, потому что \ Символ будет рассматриваться как специальный характер.

В качестве альтернативы, вы можете заменить обратные язвы \ с форвардными скольжениями / На пути:

>>> os.chdir("C:/Users/estef/Documents/FreeCodeCamp/freeCodeCamp News/9 - listdir vs system")

# Checking current working directory
>>> os.getcwd()
'C:\\Users\\estef\\Documents\\FreeCodeCamp\\freeCodeCamp News\\9 - listdir vs system'
  • А Относительный путь Указывает путь, который вы хотите следовать, чтобы найти целевой каталог, но теперь путь начинается с вашего Текущий Рабочий каталог. Это короче и проще, чем абсолютный путь.

Например, если ваш текущий рабочий каталог содержит подкаталог (папку) Каталог 1 , вы можете перейти в этот каталог, используя относительный путь (представьте его как папку в другой папке, и мы идем глубже и глубже в иерархию), как это:

>>> import os
>>> os.chdir(".\Directory 1")

# Check current working directory
>>> os.getcwd()
'C:\\Users\\estef\\Documents\\FreeCodeCamp\\freeCodeCamp News\\9 - listdir vs system\\Directory 1'

💡 Совет: Точка ( . ) в начале относительного пути . \ Directory 1 представляет текущий рабочий каталог. Двойная точка ( .. ) используется для перемещения по иерархии, в каталог «Родительский».

Теперь, когда у вас есть все фоновые знания, которые вам нужно будет по-настоящему понять, как listdir и Система Работа, давайте посмотрим их подробно.

🔸 listdir.

Начнем с listdir функция. Давайте раскрываем его тайны. ?

Цель цели и возврата

Согласно Документация Python Целью этой функции является:

По сути, эта функция возвращает список с именами всех файлов и каталогов, которые в настоящее время находятся в определенном каталоге, который вы указываете при вызове функции.

💡 Совет: Список не будет иметь определенного порядка, даже если вы обычно сортируете элементы в алфавитном порядке.

Синтаксис и параметр

Позвонить listdir Нужно использовать этот синтаксис:

Параметр . путь Именно это абсолютный или относительный путь к каталогу, который вы хотите визуализировать. В Python 3.2 и выше этот параметр является необязательным. По умолчанию путь приведет к вашему текущему рабочему каталогу, если вы не передадите аргумент.

Помните, что вы должны импортировать ОС Модуль перед вызовом этой функции.

💡 Совет: Если вы используете это оператор импорта Из ОС Импорт ListDir Чтобы импортировать функцию индивидуально, вы можете опустить Операционные системы. Префикс, как это:

Используйте случаи и преимущества

Функция listdir Очень полезно, потому что он работает в любой операционной системе, где Python работает, поэтому, если Python установлен на вашем устройстве, эта функция будет работать правильно.

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

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

images = os.listdir()

for image in images:
	# Do something to the image

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

Это круто, верно?

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

Посмотрим! ✨.

Только включать файлы

Если вы хотите «фильтровать» список, возвращаемый OS.Listdir () включить только Файлы (Нет каталогов) Вы можете использовать эту строку кода:

list(filter(os.path.isfile, os.listdir()))

💡 Совет: Вы можете настроить <Путь> аргумент или пропустить его, чтобы использовать ваш текущий рабочий каталог.

Давайте посмотрим пример с моим текущим рабочим каталогом (я использую Windows):

Мой каталог (папка) имеет:

  • Две подкаталоги (папки в главной папке)
  • Один файл PowerPoint
  • Одно изображение (файл .png)
  • Один сценарий Python

Если я позвоню listdir Функция из Script.py Файл и распечатать список возвращено:

print(os.listdir())

Это выход:

['Diagrams.ppt', 'Directory 1', 'Directory 2', 'listdir vs system.png', 'script.py']

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

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

print(list(filter(os.path.isfile, os.listdir())))

Теперь вывод:

['Diagrams.ppt', 'listdir vs system.png', 'script.py']

Обратите внимание, как каталоги были «отфильтрованы», именно то, что мы хотели.

Только включить каталоги

Точно так же, если вы хотите «фильтровать» список, чтобы включить только каталоги , вы можете использовать эту строку кода:

list(filter(os.path.isdir, os.listdir()))

Теперь вывод:

['Directory 1', 'Directory 2']

Именно то, что мы хотели. Но как это утверждение работает за кулисами? Посмотрим.

Как фильтр () работает за кулисами

Функция фильтра называется с помощью этого синтаксиса:

filter(, )

Это в основном «фильтры» элементы второго аргумента (список) на основе значения истинности, возвращаемой вызывающей функцией, переданной в качестве первого аргумента ( os.path.isfile () или os.path.isdir () в их соответствующих командах):

print(list(filter(os.path.isfile, os.listdir())))
list(filter(os.path.isdir, os.listdir()))

Эти две функции:

os.path.isfile()

os.path.isdir()

Возвращение Правда Если аргумент является файлом или каталогом, соответственно.

Основываясь на этих значениях правды, элементы списка будут включены (или нет) в окончательном «отфильтрованном» списке. Элементы списка, возвращаемого OS.Listdir () передаются один за другим к этим функциям, чтобы проверить, являются ли они файлами (или каталоги соответственно).

Например: если у нас есть эта строка кода:

filter(os.path.isfile, os.listdir())))

И OS.Listdir () Возвращает этот список:

['Diagrams.ppt', 'Directory 1', 'Directory 2', 'script.py']

Первый элемент списка ( 'diagrams.ppt' ) передается как аргумент для OS.Path.isfile () Чтобы проверить, является ли это файл:

os.path.isfile('Diagrams.ppt') # True

Вызов функции возвращает Правда Так что это файл, и он включен в список.

Но если элемент является каталогом:

os.path.isfile('Directory 1') # False

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

Тогда, поскольку Фильтр () Возвращает ITERABLE, мы составляем список из этого, используя Список () :

list(filter(os.path.isfile, os.listdir()))

И мы распечатаем его, так как мы работаем с файлом Python (Script):

print(list(filter(os.path.isfile, os.listdir())))

💡 Совет: Вы можете визуально идентифицировать, если элемент списка представляет файл или каталог, увидев, если он имеет расширение (тип) после его имени. Например: Diagrams.ppt имеет .ppt Расширение, которое говорит вам, что это файл PowerPoint, но у каталога нет расширения, как «Справочник 1» Отказ

🔹 Система («ЛС»)

Теперь, когда вы знаете, как работать с listdir Давайте посмотрим, как Система () Функция работает за кулисами и как вы можете его использовать.

Цель

Согласно Документация Python , цель Система () Функция – это:

В основном эта функция принимает команду (как строку) и выполняет ее.

В этом случае команда, которую мы проходим, это 'ls' , команда UNIX, используемая в Linux для отображения содержимого каталога в качестве стандартного вывода.

В отличие от listdir , Система () Функция не вернет список Если мы пройдем 'ls' Команда, это будет только Дисплей Список файлов и каталогов в качестве стандартного вывода. Следовательно, вы должны использовать его, если вы хотите только визуализировать список, не работая с ним в вашей программе.

Синтаксис и параметр

Чтобы вызвать эту функцию, вам нужно будет использовать этот синтаксис:

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

Особенно Ls Команда позволяет увидеть содержимое вашего текущего рабочего каталога.

Например: если это мой рабочий каталог (три файла Python и один подкаталог):

И я называю Система () Функция, как это:

>>> import os
>>> os.system("ls")

Это выход:

'Directory 1'  'file 1.py'  'file 2.py'   main.py
0

Мы можем видеть стандартный вывод в консоли (список файлов и каталогов):

'Directory 1'  'file 1.py'  'file 2.py'   main.py

и возвращаемое значение:

0

💡 Примечание: Для этих примеров Система () Функция, я работаю с помощью онлайн-инструмента командной строки, под названием REPL.IT, так как у моего компьютера установлен Windows и команда Ls не распознается командной строкой по умолчанию.

Ограничения

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

Например, Ls Команда не будет распознана в Windows по умолчанию в командной строке. Вы увидите эту ошибку, если вы попытаетесь запустить его:

Аналогичная команда в Windows будет «Дир» команда:

os.system('dir')

💡 Совет: Есть альтернативные способы запуска Ls Команда в Windows, таких как использование терминальных программ, которые распознают команды Unix, но по умолчанию Windows не распознает 'ls' команда.

Возвращаемое значение

Согласно Документация Python :

а также…

💡 Совет: Обратите внимание, что эта функция не возвращает список. Он просто отображает список в качестве стандартного вывода, поэтому вы не можете хранить его в переменной, как вы сделали с listdir Отказ

Вариации команды ls

Ключевая особенность OS.System ('ls') Состоит в том, что у него много полезных и интересных вариантов настраивания того, как настоящее вывод. Давайте посмотрим некоторые из них.

Вариант 1: Мы можем показать больше информации о файлах и каталогах, таких как их размер, местоположение и модификация и время, используя команду LS -L Отказ

>>> import os
>>> os.system('ls -l')
total 12
drwxr-xr-x 1 runner runner  0 Apr  3 18:23 'Directory 1'
-rw-r--r-- 1 runner runner 11 Apr  3 18:38 'file 1.py'
-rw-r--r-- 1 runner runner 11 Apr  3 18:38 'file 2.py'
-rw-r--r-- 1 runner runner 11 Apr  3 18:38  main.py
0

Вариант 2: Чтобы быть в состоянии визуально распознавать каталоги быстрее, мы можем использовать ls -f , который добавляет переднюю косушку / до конца их имен (см. каталог 1/' ниже).

>>> import os
>>> os.system('ls -F')
'Directory 1'/  'file 1.py'  'file 2.py'   main.py
0

Вариант 3: Чтобы сортировать файлы по размеру, мы можем использовать команду ls -ls Отказ

>>> import os
>>> os.system('ls -lS')
total 12
-rw-r--r-- 1 runner runner 11 Apr  3 18:38 'file 1.py'
-rw-r--r-- 1 runner runner 11 Apr  3 18:38 'file 2.py'
-rw-r--r-- 1 runner runner 11 Apr  3 18:38  main.py
drwxr-xr-x 1 runner runner  0 Apr  3 18:23 'Directory 1'
0

Есть еще много вариантов настройки, которые могут быть полезны для вашей конкретной цели. Здесь вы можете найти больше информации о -ls Команда и как вы можете использовать его полную мощность.

🔸 Резюме Listdir vs. Система («LS»)

  • Цель: listdir Возвращает список имен файлов и каталогов в указанном пути (по умолчанию текущий рабочий каталог) во время Система («LS») только отображает их в качестве стандартного вывода.
  • Операционная система: listdir Может использоваться независимо от операционной системы, с которой вы работаете. Напротив, Система («LS») должен быть выполнен в операционной системе или среде, которая распознает 'ls' команда.
  • Настройка: Вы можете отфильтровать список, возвращаемый listdir Если вам нужно удалить файлы или каталоги, используя Фильтр () Функция, и вы можете передавать параметры для настройки вывода Система («LS») Отказ

Я действительно надеюсь, что вам понравилась моя статья и обнаружила, что это полезно. Теперь вы можете работать с этими функциями в ваших проектах Python. Проверьте мои онлайн-курсы Отказ Следуй за мной на Twitter Отказ ⭐️.