Проблемы при получении относительных путей к файлу?

#python #python-3.x #path

#python #python-3.x #путь

Вопрос:

Я читаю файл на другом компьютере. Следовательно, мне нужно получить доступ к полному пути к файлу. Итак, я попытался использовать модуль pythons Pathlib:

 a_path = '/dir1/subdir1/sample.txt'
home = str(Path.home())
a_path = str(home)   str(a_path)
  

По-видимому, приведенный выше код возвращает мне полный путь. Однако, когда я читаю это, я получаю:

 FileNotFoundError: [Errno 2] No such file or directory: "/home/user'/dir1/subdir1/sample.txt'"
  

Как я могу исправить вышеуказанную ошибку? возможно, при конкатенации у меня возникают проблемы.

Комментарии:

1. Если вы используете pathlib.Path , используйте / для объединения путей. Например. a_path = Path.home() / a_path . Не уверен, что проблема здесь в этом. Кажется, в вашем path есть дополнительные одинарные кавычки?

2. Когда вы получаете ошибку? В каком коде?

3. Я не смог воспроизвести вашу ошибку, не могли бы вы предоставить больше информации?

4. да, я получаю дополнительные кавычки в моем path @Nathan. Я также попробовал / и получаю Posix, который я не могу прочитать

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

Ответ №1:

Попробуйте это. Здесь используется os.path.join, который соединяет два пути вместе

 import os
import pathlib
a_path = 'dir1/subdir1/sample.txt'
home = str(pathlib.Path.home())
print(os.path.join(home, a_path))
#/home/user/dir1/subdir1/sample.txt
  

Комментарии:

1. Обновлено соответствующим образом

2. что print(home) выводит для вас

3. Проблема в том, как он устанавливает a_path , а не home как он их соединяет.

4. Также вы можете запустить ls по указанному вами пути к файлу и также предоставить выходные данные

5. Тогда вам не нужно это дополнительное / , если вы используете os.path.join для объединения путей

Ответ №2:

Вы можете использовать join для вставки строки вместе.

''.join([str(Path.home()), 'path\t.txt'])

Комментарии:

1. я все еще получаю дополнительную цитату, это та же проблема

2. Проблема не имеет ничего общего с тем, как он соединяет вещи, это с тем, как он устанавливает a_path .

3. Я даже не получаю эту дополнительную цитату, поскольку в OP упоминается вывод. (Я сейчас на Windows)

Ответ №3:

Прежде всего, '/dir1/subdir1/sample.txt' это абсолютный путь. Если вы хотите, чтобы это был относительный путь (что, похоже, так и есть), вам следует использовать 'dir1/subdir1/sample.txt' , поэтому без начала / .

Используя библиотеку pathlib, это становится очень простым

 >>> from pathlib import Path
>>> a_path = "dir1/subdir1/sample.txt"
>>> a_path = Path.home() / a_path
>>> print(a_path)
/home/pareto/dir1/subdir1/sample.txt
  

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

 >>> print(Path.home() / "/dir1/subdir1/sample.txt")
/dir1/subdir1/sample.txt