Windows python script path

Самая лучшая практика: работа с path в Python

Все та же проблема: список папок и дисков

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

Теперь я подниму планку и покажу, как можно было сделать лучше.

Объединяем пути с помощью Pathlib

Старые идеи в новом обличье?

Предыдущее решение с соединением путей выглядело следующим образом:

Преимущество такого подхода заключается в том, что решение не зависит от операционной системы, и вам не нужно складывать строки с помощью оператора «+» или форматирования.

Тем не менее, здесь можно допустить ошибку, например, непреднамеренно или ошибочно определить путь к каталогу с помощью закрывающего разделителя.

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

В Python 3.4 появилось лучшее решение — модуль pathlib . Он обрабатывает функции файлов и папок модуля os с помощью объектно-ориентированного подхода.

Напомню, старый вариант выглядел вот так:

А вот альтернативный:

Оба варианта дают один и тот же результат. Так чем же второй вариант лучше?

Объектно-ориентированный и более устойчивый к ошибкам

Вызовы в основном являются объектно-ориентированными, нравится вам это или нет, но лично мне такой подход по душе. Здесь у нас есть такой объект, как определение path , у которого есть атрибуты и методы.

Однако пример с операторами перегрузки в данном случае более интересен:

Сначала разделение на два пути кажется недопустимым. Однако объект path был перегружен так, чтобы работать как объединенный путь.

В дополнение к этому синтаксическому сахару объекты path будут перехватывать другие типичные ошибки:

Такой вариант не только приятнее, но и устойчивее к неправильным входным данным. В дополнение к другим преимуществам код также не привязан к определенной операционной системе. Он определяет только generic объект path , который объявляется в системе Windows как WindowsPath , а в Linux как PosixPath .

Большинство функций, которые ожидают строку в качестве пути, могу работать непосредственно с путем. В редких случаях вам может понадобиться изменить объект просто с помощью str(Path) .

Обработка пути с помощью os.walk

В своей последней статье я использовал os.listdir , os.path.isdir и рекурсивную функцию для итерации по дереву путей и разграничения файлов и папок.

Но os.walk предлагает решение получше. Этот метод создает не список, а итератор, который можно вызывать построчно. В результате мы получим соответствующий путь к папке и список всех файлов по этому пути. Весь процесс происходит рекурсивно, поэтому вы получите все файлы одним вызовом.

Лучшее решение с os.walk и Pathlib

Если вы объедините два вышеупомянутых метода, то получите решение, которое будет более простым, полностью независимым от операционной системы, устойчивым к неправильным форматам путей и без явных рекурсий:

Если вам удастся улучшить этот вариант, не постесняйтесь рассказать мне об этом. Я был бы рад вашим отзывам!

Первую часть статьи можно найти здесь.

Также приглашаем всех желающих принять участие в бесплатном демо-уроке курса на тему «Три кита: map(), filter() и zip()».

Можно ли писать код, требующий циклов, но без циклов? Может ли он быть быстрее, чем, если бы мы использовали циклы в Python? Для реализации задуманного понадобится знание слов «callback», «iterator» и «lambda». Если интересно — присоединяйтесь!

Читайте также:  Как отформатировать компьютер для установки windows

How do I get the path of the Python script I am running in? [duplicate]

How do I get the path of a the Python script I am running in? I was doing dirname(sys.argv[0]) , however on Mac I only get the filename — not the full path as I do on Windows.

No matter where my application is launched from, I want to open files that are relative to my script file(s).

5 Answers 5

os.path.realpath(__file__) will give you the path of the current file, resolving any symlinks in the path. This works fine on my mac.

7.2 of Dive Into Python: Finding the Path.

The accepted solution for this will not work if you are planning to compile your scripts using py2exe. If you’re planning to do so, this is the functional equivalent:

Py2exe does not provide an __file__ variable. For reference: http://www.py2exe.org/index.cgi/Py2exeEnvironment

If you have even the relative pathname (in this case it appears to be ./ ) you can open files relative to your script file(s). I use Perl, but the same general solution can apply: I split the directory into an array of folders, then pop off the last element (the script), then push (or for you, append ) on whatever I want, and then join them together again, and BAM! I have a working pathname that points to exactly where I expect it to point, relative or absolute.

Of course, there are better solutions, as posted. I just kind of like mine.

and your script is in /some-path/script you’ll get ./ equal to

and not /some-path as he asked (and I need too) – Davide Nov 17 ’09 at 19:01

Windows path in Python

What is the best way to represent a Windows directory, for example «C:\meshes\as» ? I have been trying to modify a script but it never works because I can’t seem to get the directory right, I assume because of the ‘\’ acting as escape character?

5 Answers 5

you can use always:

this works both in linux and windows. Other posibility is

if you have problems with some names you can also try raw string literals:

however best practice is to use the os.path module functions that always select the correct configuration for your OS:

From python 3.4 you can also use the pathlib module. This is equivelent to the above:

Use the os.path module.

Or use raw strings

I would also recommend no spaces in the path or file names. And you could use double backslashes in your strings.

Yes, \ in Python string literals denotes the start of an escape sequence. In your path you have a valid two-character escape sequence \a , which is collapsed into one character that is ASCII Bell:

Other common escape sequences include \t (tab), \n (line feed), \r (carriage return):

As you can see, in all these examples the backslash and the next character in the literal were grouped together to form a single character in the final string. The full list of Python’s escape sequences is here.

There are a variety of ways to deal with that:

Python on Windows should handle forward slashes, too.

Как добавить Python в переменную Windows PATH

2 min

Запуск Python с терминала зачастую неизбежен. Однако, если вы впервые установили Python в Windows 10, запуск его через Терминал Windows возможен только в том случае, если он добавлен в переменную среды Windows PATH.

Это может показаться сложным, но бояться нечего. Чтобы помочь вам преодолеть повороты, связанные с добавлением Python в PATH Windows после его установки, давайте рассмотрим варианты и несколько необходимых шагов.

Зачем Добавлять Python В Windows PATH?

Если вам не удалось добавить Python в PATH в вашей ОС Windows, вы не сможете запустить интерпретатор Python, запустить виртуальную среду программирования или выполнить такие команды, как pip install, из терминала.

Читайте также:  Dfx windows 10 64 bit

Мы исследуем лучшие способы создания виртуальных сред Python и управления ими.

Это потому, что, когда вы запускаете любую программу, отличную от программы по умолчанию, из командной строки, машина ищет исполняемый файл в текущей папке или в ПУТИ Windows.

Если его нет в переменной PATH, терминал возвращает ошибку «команда не найдена». Добавление в PATH – это мощный инструмент, даже если вы выполняете команду из созданного или пакетного файла по умолчанию , добавление родительского исполняемого файла в переменную PATH также делает его доступным для вызова из терминала.

Как Вручную Добавить Python В ПУТЬ Windows

Во-первых, если вы не установили Python на свой компьютер, перейдите на веб- сайт python.org, чтобы загрузить и установить предпочитаемую версию.

После успешной установки Python на ваш компьютер проверьте, не добавлен ли он в PATH Windows. Откройте свой терминал и введите python , затем нажмите клавишу Enter . Команда может вернуть ошибку, в которой говорится, что «python не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл», что означает, что Python еще не добавлен в переменную PATH вашего компьютера.

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

Найдите Путь Установки Python На Вашем ПК

Чтобы добавить Python в ваш Windows PATH, вам нужно получить путь его установки. Для этого откройте панель поиска Windows и введите python.exe (не нажимайте клавишу Enter ). Затем щелкните правой кнопкой мыши Python.exe, который появляется в появившемся меню, и выберите опцию Открыть расположение файла .

В открывшихся окнах проводника щелкните длинную панель каталогов слева от строки поиска. Выделите и скопируйте весь текст пути в буфер обмена с помощью Ctrl + c . Затем перейдите к следующим шагам ниже.

Далее: Добавить Python В PATH В Пользовательских Переменных

Чтобы добавить Python в PATH в пользовательских переменных , щелкните правой кнопкой мыши « Этот компьютер» и выберите « Свойства» . Оказавшись в меню свойств, нажмите на опцию Advanced system settings . В следующем окне выберите вкладку Advanced и выберите Environment Variables .

Environment Variables меню состоит из двух отдельных частей: верхняя часть называется Пользовательские переменные , а нижняя часть имени системных переменных . Однако в этом случае мы сосредоточимся на пользовательских переменных .

В меню пользовательских переменных найдите переменную с именем Path . Затем вставьте путь, который вы скопировали ранее, в параметр «Значение переменной», используя Ctrl + v, и нажмите « ОК» .

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

Вернитесь в папку пути установки Python и дважды щелкните Scripts, чтобы открыть этот каталог. Затем скопируйте его путь из панели пути в верхней части окон (помимо панели поиска), как вы это делали ранее для пути установки Python.

Скопировав путь к скриптам, вернитесь к переменным среды . Затем выберите переменную Path и нажмите Edit . Введите точку с запятой после пути к исполняемому файлу Python и вставьте после него путь скриптов, который вы только что скопировали. Затем нажмите ОК .

Добавление Python В PATH С Помощью Параметра Системных Переменных

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

Чтобы использовать параметр « Системные переменные» , выполните шаги, выделенные выше, для копирования пути Python и его сценария. Затем вернитесь в переменные среды . Затем в сегменте системных переменных найдите переменную с именем Path . Щелкните эту переменную и щелкните Изменить .

В следующем появившемся окне нажмите New и вставьте путь, который вы скопировали ранее, в открывшееся пространство. Повторите этот процесс и для пути скриптов . Затем нажмите ОК и закройте окно переменных среды .

Добавить Python В Windows PATH Автоматически

Вы также можете автоматически добавить Python в PATH Windows во время установки. Хотя этот метод работает не во всех случаях, вы все равно можете попробовать.

Читайте также:  Google chrome windows software

Для этого щелкните свой установочный файл и установите флажок « Добавить Python 3.7 в PATH» . Номер версии будет меняться при установке разных версий Python.

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

Подтвердите, Что Python Добавлен В Windows PATH

Чтобы узнать, добавлен ли Python в PATH Windows, откройте терминал и введите python –version , затем нажмите клавишу Enter . Если команда возвращает текущую установленную версию Python, это означает, что вы успешно добавили ее в Windows PATH.

Однако, чтобы проверить, добавили ли вы каталог Scripts в Windows PATH, попробуйте запустить пакет установки pip на терминале, заменив «package» на предпочитаемую вами библиотеку. Если вы установили Python 2.7.9 и выше, команда устанавливает названный пакет, указывая, что вы также успешно добавили скрипты Python в путь.

Помимо добавления Python в PATH Windows, вы можете добавить текстовые редакторы, интегрированные среды разработки (IDE), Git, Node, Anaconda и многие другие программы.

Например, управлять проектом с помощью Sublime Text легко, когда вы открываете терминал в каталоге папки вашего проекта и запускаете subl. команда. Это откроет редактор в вашей текущей папке и отобразит его на боковой панели, еще один экономящий время ярлык для продуктивной работы с Sublime Text .

python script windows path

I have a python script that doesn’t seem to be opening the files. The folder in the script is defined like this:

This is how the paths are being used:

I’m running this script in Windows 7 sp1 Does this look correct? Is there something I can put into the code to debug it to make sure the files are opening?

Edited to provide more clarification:

The actual code to open and close the file is here:

I was originally wondering if the double back slashes included in the path were correct. I can’t figure out why it isn’t producing the output correctly.

Just in case someone would like to see the entire script I posted it: The first half is at:

The second half is at:

It was too large to post all in one.

This is being run in Python 3.2.2

Thank you very much for looking at it,

1 Answer 1

The code as written above does not actually open either file.

os.listdir returns a list of the files (technically entries, as non-files like . and .. are also included) in the specified path, but does not actually open them. For that you would need to call the open function on one of the paths.

If you wanted to open all the files in filenames for write, you could do something like this:

After this, the list fileList would contain the open file handles for all of the files, which could then be iterated over (and, for example, all written to if you wanted to multiplex the output).

Note that when done, you should loop through the list and explicitly close them all (the with syntax that automatically closes them has additional complexities/limitations when it comes to dynamically sized lists, and is best avoided here, IMO).

For more info on files, see: Reading and Writing Files

Also, it’s best to use os.path.join to combine components of a path. That way it can be portable across supported platforms, and will automatically use the correct path separators, and such.

Edit in response to comment from OP:

I would recommend you step through the code using a debugger to see exactly what’s going wrong. I use pudb, which is an enhanced command-line debugger, and find it invaluable. You can install it via pip into your system/virtualenv Python environment.

Оцените статью