Получение и изменение текущей директории
Запуская любую программу или консоль, например CMD, мы это делаем из определенной директории. С этой и соседней директорией мы можем работать без указания полного пути. Для того что бы узнать такую директорию в Python используется метод os.getcwd():
В директории ‘D:\’ сохранен мой файл, с которого я запускаю методы. Вы можете изменить такую директорию с os.chdir() . Такой подход удобен, когда файлы, с которыми вы работаете в основном находятся в другом месте и вы сможете избежать написания полного пути:
Так же как и в любых языках, в любых методах описанных выше, вы можете использовать ‘..’ для работы с директорией выше или ‘/’ для работы со внутренней:
…
Рекомендую
Объяснение
Визуальное студийное задание:
Часть, на которой мы хотим сосредоточиться, это:
Эта часть запускает новый файл python, который я создал в корневой папке, и передает путь к файлу, который является активным, в качестве параметра
Скрипт Python:
- Этот скрипт Python получает в качестве параметра путь к активному файлу.
- Затем он создает команду оболочки для пути (команда оболочки похожа на ответ @ kasper-keinänen)
- Затем он запускает эту команду оболочки
С этими изменениями я могу запустить любой файл в корневом каталоге с импортом из любого файла в корневом каталоге.
И я могу сделать это, только нажав .
Объекты ZipInfo¶
Экземпляры класса возвращаются методами и
объектов . Каждый объект хранит информацию об
одном элементе ZIP-архива.
- classmethod (filename, arcname=None, *, strict_timestamps = истина)
-
Создать экземпляр для файла в файловой системе, чтобы
подготовить его к добавлению в zip файл.filename должен быть путём к файлу или каталогу в файловой системе.
Если указан arcname, он используется как имя в архиве. Если arcname не
указан, имя будет таким же, как filename, но с удаленными разделителями
буквы диска и начального пути.Аргумент strict_timestamps, если ему задано значение , позволяет
архивировать файлы старше 1 января 1980 года за счёт установки метки времени
на 01 января 1980 года. Аналогичное поведение происходит с файлами новее
2107-12-31, временная метка также установлена на предельное значение.Добавлено в версии 3.6.
Изменено в версии 3.6.2: Параметр filename принимает .
Добавлено в версии 3.8: Аргумент strict_timestamps, содержащий только ключевой аргумент.
У экземпляров есть следующие методы и атрибуты:
- ()
-
Возвращает , если этот элемент архива является каталогом.
Здесь используется имя записи: каталоги всегда должны заканчиваться на
.Добавлено в версии 3.6.
-
Имя файла в архиве.
-
Время и дата последнего изменения элемента архива. Это кортеж из шести
значений:Индекс Значение Год (>= 1980) Месяц (начиная с 1) День месяца (начиная с 1) Часы (начиная с нуля) Минуты (начиная с нуля) Секунды (начиная с нуля) Примечание
Формат файла ZIP не поддерживает отметки времени до 1980 года.
-
Тип сжатия для элемента архива.
-
Комментарий для отдельного элемента архива как объекта .
-
Система, создавшая ZIP-архив.
-
Версия PKZIP для создания ZIP-архива.
-
Версия PKZIP, необходимая для распаковки архива.
-
Должен быть равен нулю.
-
Биты флага ZIP.
-
Номер тома заголовка файла.
-
Внутренние атрибуты.
-
Атрибуты внешнего файла.
-
Байтовое смещение заголовка файла.
-
CRC-32 несжатого файла.
-
Размер сжатых данных.
Выбор выполняемых тестов¶
поддерживает несколько способов выбора и запуска тестов из командной строки.
Запуск тестов модуля
pytest test_mod.py
Запуск тестов из директории
pytest testing/
Запуск тестов, удовлетворяющих ключевому выражению
pytest -k "MyClass and not method"
Эта команда запустит тесты, имена которых удовлетворяют заданному строковому выражению
(без учета регистра). Строковые выражения могут включать операторы , которые
используют имена файлов, классов и функций в качестве переменных. В приведенном выше
примере будет запущен тест , но не будет запущен тест
.
Запуск тестов по идентификаторам узлов
Каждому собранному тесту присваивается уникальный идентификатор ,
который состоит из имени файла модуля, за которым следуют спецификаторы,
такие как имена классов, имена функций и параметры из параметризации, разделенные символами :
Чтобы запустить конкретный тест из модуля, выполните:
pytest test_mod.py::test_func
Еще один пример спецификации тестового метода в командной строке:
pytest test_mod.py::TestClass::test_method
Запуск маркированных тестов
pytest -m slow
Будут запущены тесты, помеченные декоратором .
Подробнее см. .
Запуск тестов из пакетов
pytest --pyargs pkg.testing
🔸 Как изменить файл
Чтобы изменить (запись в) файл, вам нужно использовать Написать () метод. У вас есть два способа сделать это (добавить или писать) на основе режима, с которым вы решите открыть его. Давайте посмотрим их подробно.
Присоединиться к
«Применение» означает добавление чего-либо до конца другой вещи. Режим позволяет открыть файл для добавления некоторого контента к нему.
Например, если у нас есть этот файл:
И мы хотим добавить в нее новую строку, мы можем открыть его, используя «А» Режим (добавить), а затем позвоните в Написать () Метод, передача содержимого, которое мы хотим добавить в качестве аргумента.
Это основной синтаксис для вызова Написать () Метод:
Вот пример:
f = open("data/names.txt", "a") f.write("\nNew Line") f.close()
Совет: Обратите внимание, что я добавляю Перед линией, чтобы указать, что я хочу, чтобы новая строка появилась как отдельная строка, а не как продолжение существующей строки. Это файл сейчас, после запуска скрипта:
Это файл сейчас, после запуска скрипта:
Совет: Новая строка может не отображаться в файле до f.close () бежит.
Писать
Иногда вы можете удалить содержимое файла и полностью заменить его с новым контентом. Вы можете сделать это с Написать () Метод, если вы открываете файл с “W” режим.
Здесь у нас есть этот текстовый файл:
Если я запускаю этот скрипт:
f = open("data/names.txt", "w") f.write("New Content") f.close()
Это результат:
Как видите, открывая файл с “W” Режим, а затем запись на него заменяет существующий контент.
Совет: Метод возвращает количество написанных символов.
Если вы хотите написать несколько строк одновременно, вы можете использовать Writelines () Метод, который принимает список строк. Каждая строка представляет собой строку, которая будет добавлена в файл.
Вот пример. Это начальный файл:
Если мы запустим этот скрипт:
f = open("data/names.txt", "a") f.writelines() f.close()
Линии добавляются к концу файла:
Открытый файл для нескольких операций
Теперь вы знаете, как создавать, читать и записывать в файл, но что, если вы хотите сделать больше, чем одна вещь в той же программе? Давайте посмотрим, что произойдет, если мы попытаемся сделать это с режимами, которые вы узнали до сих пор:
Если вы открываете файл в Режим (прочитайте), а затем попробуйте написать ему:
f = open("data/names.txt") f.write("New Content") # Trying to write f.close()
Вы получите эту ошибку:
Traceback (most recent call last): File "", line 9, in f.write("New Content") io.UnsupportedOperation: not writable
Точно так же, если вы откроете файл в Режим (напишите), а затем попробуйте прочитать его:
f = open("data/names.txt", "w") print(f.readlines()) # Trying to read f.write("New Content") f.close()
Вы увидите эту ошибку:
Traceback (most recent call last): File "", line 14, in print(f.readlines()) io.UnsupportedOperation: not readable
То же самое произойдет с (Добавить) режим.
Как мы можем решить это? Чтобы иметь возможность прочитать файл и выполнить другую работу в той же программе, вам нужно добавить Символ в режиме, как это:
f = open("data/names.txt", "w+") # Read + Write
f = open("data/names.txt", "a+") # Read + Append
f = open("data/names.txt", "r+") # Read + Write
Очень полезно, верно? Это, вероятно, то, что вы будете использовать в ваших программах, но обязательно включите только моды, которые вам нужно, чтобы избежать потенциальных ошибок.
Иногда файлы больше не нужны. Давайте посмотрим, как вы можете удалить файлы с помощью Python.
Проблемы при установке пакета с помощью установщика pip
Есть ряд причин, по которым установка может завершиться сбоем. Во многих случаях правильным будет обратиться к разработчику пакета.
Распространенная причина проблем — попытка установки в расположение, для которого у вас нет разрешения на изменение. Например, для расположения установки по умолчанию могут потребоваться права администратора, но по умолчанию в Python их нет. Лучшее решение — создать и установить пакет в ней.
Некоторые пакеты содержат машинный код, для установки которого требуется компилятор C или C++. Как правило, разработчики пакетов должны публиковать предварительно скомпилированные версии, но зачастую они этого не делают. Некоторые из этих пакетов могут работать, если и выбрать вариант C++, но в большинстве случаев необходимо обратиться к разработчику пакета.
Использование краткого имени для необязательного аргумента
Передача множества необязательных элементов может сделать наш скрипт Python длинным. Таким образом, мы также можем присвоить параметрам краткое имя. Мы можем дать параметрам сокращенное название; это поможет нам сделать наш скрипт Python коротким.
Давайте разберемся в следующем примере.
import argparse parser = argparse.ArgumentParser() parser.add_argument('-tut', '--tutorial', help="Best Tutorial ") parser.add_argument('-w', '--writer', help="Technical Content") args = parser.parse_args() if args.tutorial == 'Javatpoint': print('Congratulation|| You made it!') if args.writer == 'Devansh': print('Technical Writer.')
Выход:
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py -w Devansh Technical Writer.
В приведенном выше коде мы присвоили сокращение обоим необязательным аргументам. Мы можем получить к нему доступ, используя его короткое имя.
Запись в файл Python
Чтобы записать данные в файл в Python, нужно открыть его в режиме ‘w’, ‘a’ или ‘x’. Но будьте осторожны с режимом ‘w’. Он перезаписывает файл, если то уже существует. Все данные в этом случае стираются.
Запись строки или последовательности байтов (для бинарных файлов) осуществляется методом write(). Он возвращает количество символов, записанных в файл.
with open("test.txt",'w',encoding = 'utf-8') as f: f.write("my first filen") f.write("This filenn") f.write("contains three linesn")
Эта программа создаст новый файл ‘test.txt’. Если он существует, данные файла будут перезаписаны. При этом нужно добавлять символы новой строки самостоятельно, чтобы разделять строки.
🔹 Как удалить файлы
Чтобы удалить файл с помощью Python, вам нужно импортировать модуль под названием ОС который содержит функции, которые взаимодействуют с вашей операционной системой.
Совет: А модуль это файл Python со связанными переменными, функциями и классами.
Особенно вам нужен Удалить () функция. Эта функция принимает путь к файлу в качестве аргумента и автоматически удаляет файл.
Давайте посмотрим пример. Мы хотим удалить файл под названием Отказ
Чтобы сделать это, мы пишем этот код:
import os os.remove("sample_file.txt")
- Первая строка: называется «Импорт оператора». Это утверждение написано в верхней части вашего файла, и он дает вам доступ к функциям, определенным в модуль.
- Вторая строка: Удаляет указанный файл.
Совет: Вы можете использовать абсолютный или относительный путь.
Теперь, когда вы знаете, как удалить файлы, давайте посмотрим интересный инструмент … Контекстные менеджеры!
8 ответов
Лучший ответ
Если у вас есть pip install и вы хотите увидеть, какие пакеты были установлены с вашими инструментами установки, вы можете просто вызвать это:
Он также будет включать номера версий для установленных пакетов.
Обновить
Pip был обновлен и теперь производит тот же вывод, что и , вызывая:
Примечание
Выходные данные из отформатированы по-разному, поэтому, если у вас есть какой-то сценарий оболочки, который анализирует выходные данные (возможно, чтобы получить номер версии) и хотите изменить свой сценарий на вызов , вам нужно будет изменить код разбора.
189
Jeff LaFay
9 Июл 2014 в 19:28
Вот способ сделать это, используя вместо абсолютного пути вашей библиотеки libs dir:
2
chown
17 Окт 2012 в 17:44
Если вы хотите получить информацию об установленных дистрибутивах Python и не хотите использовать для этого консоль или терминал cmd, а использовать код Python, вы можете использовать следующий код (протестирован с Python 3.4):
Вызов функции возвращает итерацию, а из-за цикла for и функции print элементы, содержащиеся в итерации, выводятся через символы новой строки (). Результат будет (в зависимости от установленных дистрибутивов) выглядеть примерно так:
29
frosty
31 Окт 2015 в 22:42
Если это необходимо для запуска из Python, вы можете просто вызвать подпроцесс
juftin
3 Янв 2020 в 21:49
Для запуска этого в более поздних версиях pip (протестировано на ) используйте следующее:
7
exhuma
27 Июн 2018 в 07:00
Мой дубль:
3
alfredocambera
8 Мар 2019 в 00:07
С установленными пакетами pip, вы можете сделать
А затем (внутри этого virtualenv) сделать
Таким образом, вы можете , а затем посмотреть, какие пакеты установлены для этого virtualenv / проекта.
Например:
Или если у вас есть пакет Python с файлом require.pip,
Сделает свое дело
5
Andbdrew
17 Окт 2012 в 17:37
Вы можете попробовать: желток
Для установки желток попробуйте:
8
llazzaro
9 Дек 2012 в 05:50
Детализация сводного отчета¶
Флаг можно использовать для отображения «краткой сводной информации по тестированию»
в конце тестового сеанса, что упрощает получение четкой картины всех сбоев, пропусков, xfails и т. д.
По умолчанию для списка сбоев и ошибок используется добавочная комбинация .
Пример:
# content of test_example.py import pytest @pytest.fixture def error_fixture(): assert def test_ok(): print("ok") def test_fail(): assert def test_error(error_fixture): pass def test_skip(): pytest.skip("skipping this test") def test_xfail(): pytest.xfail("xfailing this test") @pytest.mark.xfail(reason="always xfail") def test_xpass(): pass
$ pytest -ra =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.y cachedir: $PYTHON_PREFIX/.pytest_cache rootdir: $REGENDOC_TMPDIR collected 6 items test_example.py .FEsxX ================================== ERRORS ================================== _______________________ ERROR at setup of test_error _______________________ @pytest.fixture def error_fixture(): > assert 0 E assert 0 test_example.py:6: AssertionError ================================= FAILURES ================================= ________________________________ test_fail _________________________________ def test_fail(): > assert 0 E assert 0 test_example.py:14: AssertionError ========================= short test summary info ========================== SKIPPED $REGENDOC_TMPDIR/test_example.py:22: skipping this test XFAIL test_example.py::test_xfail reason: xfailing this test XPASS test_example.py::test_xpass always xfail ERROR test_example.py::test_error - assert 0 FAILED test_example.py::test_fail - assert 0 == 1 failed, 1 passed, 1 skipped, 1 xfailed, 1 xpassed, 1 error in 0.12s ===
Параметр принимает ряд символов после себя. Использованный выше символ означает
“все, кроме успешных».
Вот полный список доступных символов, которые можно использовать:
Есть и специальные символы для пропуска отдельных групп:
Можно использовать более одного символа. Например, для того, чтобы увидеть только
упавшие и пропущенные тесты, можно выполнить:
$ pytest -rfs =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.y cachedir: $PYTHON_PREFIX/.pytest_cache rootdir: $REGENDOC_TMPDIR collected 6 items test_example.py .FEsxX ================================== ERRORS ================================== _______________________ ERROR at setup of test_error _______________________ @pytest.fixture def error_fixture(): > assert 0 E assert 0 test_example.py:6: AssertionError ================================= FAILURES ================================= ________________________________ test_fail _________________________________ def test_fail(): > assert 0 E assert 0 test_example.py:14: AssertionError ========================= short test summary info ========================== FAILED test_example.py::test_fail - assert 0 SKIPPED $REGENDOC_TMPDIR/test_example.py:22: skipping this test == 1 failed, 1 passed, 1 skipped, 1 xfailed, 1 xpassed, 1 error in 0.12s ===
Использование добавляет в сводный отчет успешные тесты, а добавляет
дополнительный раздел «пройдены” (PASSED) для тестов, которые прошли, но перехватили вывод:
Как узнать путь к файлу или папке
Если вам требуется узнать путь к файлу или папке в Windows, используя только встроенные средства системы, достаточно перейти в нужную папку, посмотреть путь к ней в адресной строке проводника и добавить к нему имя файла после знака «\». Также вы можете открыть свойства файла (нажав правой кнопкой мыши по нему и выбрав нужный пункт) и увидеть там путь к нему в поле «Расположение».
К этому расположению (которое можно скопировать из окна свойств) также добавляем \ и имя файла, которое также отображается в свойствах — получаем полный путь к файлу, например, для скриншота выше путь буде выглядеть как C:\Windows\Winhlp32.exe. Но это не обязательно делать вручную, есть способ проще.
Копирование пути к файлу или папке
В сторонних файловых менеджерах есть свои функции для выполнения рассматриваемой задачи, но вы можете легко скопировать путь к файлу и во встроенном проводнике Windows 10:
Готово — теперь вы можете вставить (Ctrl+V, Shift+Insert или через контекстное меню) в любое место, например, в командную строку. Путь к файлу вставляется в кавычках — для большинства применений удалять их не обязательно.
Копирование пути к папке еще проще: находясь в нужной папке, нажмите указателем мыши в правой части адресной строки проводника — весь путь будет выделен.
Скопируйте его в буфер обмена — Ctrl+C, Ctrl+Insert или с использованием контекстного меню.
Видео инструкция
Надеюсь, несмотря на краткость, материал окажется полезным для кого-то из читателей.
А вдруг и это будет интересно:
Почему бы не подписаться?
Спасибо за подробную информацию.
Есть ещё проще вариант для Win10 1) выделить нужный файл 2) в ленте проводника выбрать Главная — раздел Буфер обмена — кнопка Скопировать путь
А есть ещё вариант, перетащить файл в cmd, путь должен ввестись сам.
прекрасный у вас сайт предлагаю-сделать кнопку ночного режима, как на ютюбе, в серых тонах
У 10ки сейчас все проще: выделяем файл, далее зажимает SHIFT и жмем ПКМ, после выбираем Копировать как путь.
Открытие файла Python
Не знаете как открыть файл в питоне? В Python есть встроенная функция open(), предназначенная для открытия файла. Она возвращает объект, который используется для чтения или изменения файла.
>>> f = open("test.txt") # открыть файл в текущей папке >>> f = open("C:/Python33/README.txt") # указание полного пути
При этом можно указать необходимый режим открытия файла: ‘r’- для чтения,’w’ — для записи,’a’ — для изменения. Мы также можем указать, хотим ли открыть файл в текстовом или в бинарном формате.
По умолчанию файл открывается для чтения в текстовом режиме. При чтении файла в этом режиме мы получаем строки.
В бинарном формате мы получим байты. Этот режим используется для чтения не текстовых файлов, таких как изображения или exe-файлы.
Открытие файла Python- возможные режимы | |
Режим | Описание |
‘r’ | Открытие файла для чтения. Режим используется по умолчанию. |
‘w’ | Открытие файла для записи. Режим создаёт новый файл, если он не существует, или стирает содержимое существующего. |
‘x’ | Открытие файла для записи. Если файл существует, операция заканчивается неудачей (исключением). |
‘a’ | Открытие файла для добавления данных в конец файла без очистки его содержимого. Этот режим создаёт новый файл, если он не существует. |
‘t’ | Открытие файла в текстовом формате. Этот режим используется по умолчанию. |
‘b’ | Открытие файла в бинарном формате. |
‘+’ | Открытие файла для обновления (чтения и записи). |
f = open("test.txt") # эквивалент 'r' или 'rt' f = open("test.txt",'w') # запись в текстовом режиме f = open("img.bmp",'r+b') # чтение и запись в бинарном формате
В отличие от других языков программирования, в Python символ ‘a’ не подразумевает число 97, если оно не закодировано в ASCII (или другой эквивалентной кодировке).
Кодировка по умолчанию зависит от платформы. В Windows – это ‘cp1252’, а в Linux ‘utf-8’.
Поэтому мы не должны полагаться на кодировку по умолчанию. При работе с файлами в текстовом формате рекомендуется указывать тип кодировки.
f = open("test.txt",mode = 'r',encoding = 'utf-8')
Интерфейс командной строки¶
Модуль предоставляет простой интерфейс командной строки для
взаимодействия с ZIP-архивами.
Если вы хотите создать новый ZIP-архив, укажите его имя после параметра
, а затем укажите имена файлов, которые должны быть включены:
$ python -m zipfile -c monty.zip spam.txt eggs.txt
Передача каталога также приемлема:
$ python -m zipfile -c monty.zip life-of-brian_1979/
Если вы хотите распаковать ZIP-архив в указанный каталог, использовать параметр
:
$ python -m zipfile -e monty.zip target-dir/
Для получения списка файлов в ZIP-архиве использовать параметр :
$ python -m zipfile -l monty.zip
Типы аргументов в интерфейсе командной строки
Есть два аргумента, которые мы можем добавить к интерфейсу командной строки.
- Позиционный аргумент
- Необязательный аргумент
Давайте разберемся с обоими аргументами.
Позиционные аргументы – это типы аргументов, которые мы используем в команде для работы. Мы передаем аргумент команде и выполняем некоторые операции. Их положение определяется их функцией. Вот почему они называются позиционным аргументом.
По умолчанию позиционные аргументы обрабатываются как String, однако мы можем привести к другому типу данных.
В предыдущем примере мы использовали позиционные аргументы для выполнения операции сложения между двумя числами.
Давайте разберемся в следующем коде.
Пример – 1
import argparse parser = argparse.ArgumentParser() # By default, it treats input number as string parser.add_argument('num', help="Enter nmber to get square of it.") args = parser.parse_args() print(args.num**2)
Выход:
Мы прошли 15, и он вернул 1515, потому что argparse обрабатывается как строка. Мы можем исправить это с помощью атрибута type.
Пример –
import argparse parser = argparse.ArgumentParser() parser.add_argument('num', help="Enter number to get square of it.", type = int) args = parser.parse_args() print(args.num**2)
Выход:
Теперь мы получили желаемый результат.
Необязательный аргумент – необязательный аргумент не является обязательным. Мы не получим ошибку, если она не будет передана в скрипт. Эти типы аргументов начинаются с префикса – одинарного тире или двойного тире “-“. Нам нужно вызвать .add_parse() для передачи необязательных аргументов.
Давайте разберемся в следующем примере.
# importing argparse module import argparse parser = argparse.ArgumentParser() # creating two variables using the add_argument method parser.add_argument("--num1", help = "first number") parser.add_argument("--num2", help = "second number") parser.add_argument("--operation", help = "operation") args = parser.parse_args() print(args.num1) print(args.num2) print(args.operation) n1 = int(args.num1) n2 = int(args.num2) if args.operation == "add": result = n1 + n2 print("The Result is : ",result) elif args.operation == "sub": result = n1 - n2 elif args.operation == "mul": result = n1 * n2 elif args.operation == "div": result = n1 / n2 else: print("Unmatched Argument") print("result is : ",result)
Когда мы запускаем приведенный выше код без передачи каких-либо аргументов, он покажет следующий результат.
Выход:
Как видно из приведенного выше кода, мы запустили скрипт без передачи каких-либо необязательных аргументов, и вместо того, чтобы возвращать ошибку, он ничего не возвращает. Типы справочного сообщения и данных для необязательных параметров такие же, как и в позиционных параметрах.
Специальные ярлыки
Если просто ввести команду cd без указания пути, то будет выполнен переход в домашнюю директорию. Проверим.
1 |
$ cd $ pwd /home/mikhail |
Чтобы сменить рабочую директорию на предыдущую, можно использовать символ «-» (минус). Сейчас мы в домашней директории, до этого были в /usr/bin. Значит после ввода команды cd — должны снова вернуться в /usr/bin. Проверим.
1 |
$ cd — /usr/bin $ pwd /usr/bin |
Сослаться на домашнюю директорию любого пользователя можно добавим перед именем учетной записи символ «~» (тильда), например ~mikhail. Так мы можем указать домашнюю директорию любого пользователя вне зависимости от того, где она расположена. Проверим.
1 |
$ cd ~mikhail $ pwd /home/mikhail |
Если после символа «~» (тильда) не указать имя пользователя, то данный символ будет ссылаться на собственную домашнюю директорию.
Механизм работы подобной «ссылки» реализован за счет развертывания строк (материал из будущего ;)).
А теперь заморозим виртуальную машину в данном состоянии.