Я хотел бы внести свой вклад в один общий сценарий (в Python 3) и изучить несколько подходов к нему.
Встроенная функция open () принимает в качестве первого аргумента относительный или абсолютный путь. Относительный путь обрабатывается как относительно текущего рабочего каталога , поэтому рекомендуется передавать абсолютный путь к файлу.
Проще говоря, если вы запустите файл сценария со следующим кодом, то не гарантирует, что файл example.txt
будет создан в том же каталоге, где находится файл сценария:
with open('example.txt', 'w'):
pass
Чтобы исправить этот код, нам нужно получить путь к сценарию и сделать его абсолютным. Чтобы обеспечить абсолютный путь, мы просто используем функцию os.path.realpath () . Чтобы получить путь к сценарию, есть несколько общих функций, которые возвращают различные результаты пути:
os.getcwd()
os.path.realpath('example.txt')
sys.argv[0]
__file__
Обе функции os.getcwd () и os.path.realpath () возвращают результаты пути на основе текущего рабочего каталога . Вообще не то, что мы хотим. Первым элементом списка sys.argv является путь корневого сценария (выполняемый сценарий) независимо от того, вызываете ли вы список в самом корневом сценарии или в любом из его модули. Это может пригодиться в некоторых ситуациях. Переменная __ file __ содержит путь к модулю, из которого она была вызвана.
Следующий код правильно создает файл example.txt
в том же каталоге, где находится скрипт:
filedir = os.path.dirname(os.path.realpath(__file__))
filepath = os.path.join(filedir, 'example.txt')
with open(filepath, 'w'):
pass