Как я могу получить путь и имя файла, который выполняется в настоящее время?

Вы можете использовать результат Number при передаче аргумента его конструктору.

Если аргумент (строка) не может быть преобразован в число, он возвращает NaN, поэтому вы можете определить, была ли приведенная строка допустимым числом или нет.

Примечания: Обратите внимание, что при передаче пустой строки или '\t\t' и '\n\t', когда Number возвращает 0; Передача true вернет 1, а false вернет 0.

    Number('34.00') // 34
    Number('-34') // -34
    Number('123e5') // 12300000
    Number('123e-5') // 0.00123
    Number('999999999999') // 999999999999
    Number('9999999999999999') // 10000000000000000 (integer accuracy up to 15 digit)
    Number('0xFF') // 255
    Number('Infinity') // Infinity  

    Number('34px') // NaN
    Number('xyz') // NaN
    Number('true') // NaN
    Number('false') // NaN

    // cavets
    Number('    ') // 0
    Number('\t\t') // 0
    Number('\n\t') // 0

448
задан kdopen 15 June 2015 в 16:06
поделиться

10 ответов

p1.py:

execfile("p2.py")

p2.py:

import inspect, os
print inspect.getfile(inspect.currentframe()) # script filename (usually with path)
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # script directory
240
ответ дан Uysrc 15 June 2015 в 16:06
поделиться

Можно использовать inspect.stack()

import inspect,os
inspect.stack()[0]  => (<frame object at 0x00AC2AC0>, 'g:\\Python\\Test\\_GetCurrentProgram.py', 15, '<module>', ['print inspect.stack()[0]\n'], 0)
os.path.abspath (inspect.stack()[0][1]) => 'g:\\Python\\Test\\_GetCurrentProgram.py'
4
ответ дан Jahid 15 June 2015 в 16:06
поделиться

__file__ атрибут работает на обоих файл, содержащий основной код выполнения, а также импортированные модули.

См. https://web.archive.org/web/20090918095828/http://pyref.infogami.com / __ файл __

8
ответ дан Brian Burns 15 June 2015 в 16:06
поделиться

Не совсем ясно, что Вы подразумеваете "под filepath файла, который в настоящее время работает в рамках процесса". sys.argv[0] обычно содержит местоположение сценария, который был вызван интерпретатором Python. Проверьте sys документация для получения дополнительной информации.

, Поскольку @Tim и @Pat Notz указали, __ файл __, атрибут обеспечивает доступ к

файл, из которого был загружен модуль, если это было загружено из файла

12
ответ дан twasbrillig 15 June 2015 в 16:06
поделиться

Я думаю, что это всего __file__, Кажется, что можно также хотеть к контролю эти , осматривают модуль .

5
ответ дан smparkes 15 June 2015 в 16:06
поделиться

Так как Python 3 является довольно основным, я хотел включать pathlib ответ, поскольку я полагаю, что это - вероятно, теперь лучший инструмент для доступа к файлу и информации о пути.

from pathlib import Path

current_file: Path = Path(__file__).resolve()

при поиске каталога текущего файла это столь же легко как добавление .parent к Path() оператор:

current_path: Path = Path(__file__).parent.resolve()
1
ответ дан 22 November 2019 в 22:57
поделиться
__file__

, как сказали другие. Вы также можете использовать os.path.realpath для устранения симлинков:

import os

os.path.realpath(__file__)
548
ответ дан 22 November 2019 в 22:57
поделиться
import sys

print sys.path[0]

это напечатает путь выполняющегося в настоящее время скрипта

.
6
ответ дан 22 November 2019 в 22:57
поделиться

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

Если вы хотите узнать имя исполняемого файла (т. Е. Корневого файла, переданного интерпретатору python для текущей программы) из файла, который может быть импортирован как модуль, вам необходимо сделать это (предположим, что это в файле с именем foo.py ):

import inspect

print inspect.stack () [- 1] [1]

Потому что последнее ( [- 1 ] ) в стеке - это первое, что в него попадает (стеки представляют собой структуры данных LIFO / FILO).

Затем в файле bar.py , если вы импортируете foo , он напечатает bar.py , а не foo.py , который будет значением всех из них:

  • __ file __
  • inspect.getfile (inspect.currentframe ())
  • inspect.stack () [0] [1]
37
ответ дан 22 November 2019 в 22:57
поделиться
import sys
print sys.argv[0]
3
ответ дан 22 November 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: