Я пытаюсь прочитать файл, используя функцию with open() из python. Я передаю путь к файлу через базовый путь, а затем добавляю к нему относительный путь:
filepath = base_path + path_to_specific_file
with open (filepath) as l:
do_stuff()
base_path использует домашний символ linux (я использую Ubuntu на виртуальной машине) ~/base_path/
, так как я хочу, чтобы путь к файлу был адаптирован для каждого устройства, а не жестко кодировался.
Это не работает. Когда я выполняю код, он выдает ошибку «файл не найден», хотя путь существует. Я даже могу открыть его, щелкнув путь в терминале vscode.
Согласно этой теме:
Файл не найден в Python, хотя файл существует
проблема в ~/
вместо /home/username/
. Есть ли способ заменить это, чтобы оно работало на каждом устройстве с правильным путем? Я пока не могу комментировать эту тему, так как у меня недостаточно репутации, поэтому мне нужно было создать этот новый вопрос. Извини за это.
~ — это ярлык оболочки. использовать path.home()
Вы можете присоединиться к путям, например. с:
filepath = '/'.join((basepath, path_to_specific_file))
Или сделайте, как предложил Крис: используйте pathlib:
>>> basepath = Path('/tmp/')
>>> path_to_specific_file = Path('test')
>>> filepath = basepath / path_to_specific_file
>>> print(filepath)
/tmp/test
Обновлено:
Чтобы получить доступ к $HOME
(~
), вы можете использовать Path.home()
.
Это не будет работать для коротких путей, таких как ~.
Вы можете использовать expanduser()
из pathlib
для этого. Пример
import pathlib
filepath = pathlib.Path(base_path) / path_to_specific_file
filepath = filepath.expanduser() # expand ~
with open(filepath) as l:
do_stuff()
Это должно работать нормально.
Не объединяйте пути к файлам с помощью
+
, так как иногда это может пойти не так. используйтеpathlib.Path
и создайте путь к файлу. Вы можете получить от негоabsolute_path()
, который разрешит такие формы.