(Python) Почему я всегда должен вводить абсолютные пути в файловых функциях? - PullRequest
0 голосов
/ 11 апреля 2010

Например, если у меня есть:
C: \ 42 \ main.py
и
C: \ 42 \ info.txt
и я хочу прочитать info.txt из main.py, я должен ввести «C: \ 42 \ info.txt» вместо просто «info.txt».

Это должно быть так?
Если нет, как я могу это исправить?

Ответы [ 3 ]

10 голосов
/ 11 апреля 2010

Вы можете указать пути относительно вашего сценария. Я делаю это все время, когда пишу юнит-тесты.

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

py_file= os.path.abspath(__file__) # path to main.py
py_dir = os.path.dirname(py_file) # path to the parent dir of main.py
txt_file = os.path.join(py_dir, 'info.txt') # path to info.txt
5 голосов
/ 11 апреля 2010

Это должно быть так. Относительные пути относятся к текущему рабочему каталогу процесса, а не к каталогу, в котором находится ваш скрипт.

1 голос
/ 11 апреля 2010

Вместо жесткого кодирования вы можете найти путь к скрипту, используя sys.path[0] и либо chdir к нему, либо использовать его непосредственно в имени файла:

os.path.join(sys.path[0], 'info.txt')
...