Открыть файл не в папке со скриптом

Мне надо сделать приложение которое открывает файл в другой папке, не в его. Я узнала что чтоб открыть файл в другой папке нужно перед тем как писать путь написать r:

example = open(r"C:\\Users\\Alena\\example\\example.txt", "r")

Так как у пользователя может быть другой диск, и другое имя пользователя я поступила вот так вот:

username = os.getenv("Username")
drive = os.getenv("SystemDrive")
data = drive + "\\Users\\" + username + "\\example\\example.txt"
example = open(rdata, 'r')

Python думает что rdata это имя переменной, и выводит ошибку что имя rdata не найдено. Мне надо сделать чтоб переменная data была путем, а r чтоб указывало Python чтоб строка data обрабатывалась как переменная.


Ответы (1 шт):

Автор решения: insolor

К именам переменных r приписывать не нужно. r - это специальный синтаксис строкового литерала (т.е. строк записанных в кавычках прямо в коде), который позволяет не удваивать обратные слеши (т.е. r - это не магический символ, превращающий обычную строку в путь).

С r путь должен выглядеть так: r"C:\Users\Alena\example\example.txt".

И это то же самое что такая строка: "C:\\Users\\Alena\\example\\example.txt"

В обоих случаях при выводе этой строки через print получится C:\Users\Alena\example\example.txt

r"C:\\Users\\Alena\\example\\example.txt" - это некорректный путь, в нем все слеши будут задвоены (это видно, если вывести эту строку через print), и файл по такому пути не получится открыть.

Чтобы исправить ваш код, просто уберите r перед data. Там, где обратные слеши и так у вас удвоены, тоже не нужно добавлять r. Рабочий пример:

username = os.getenv("Username")
drive = os.getenv("SystemDrive")
data = drive + "\\Users\\" + username + "\\example\\example.txt"
example = open(data, 'r')

Вообще, если нужно формировать путь из нескольких частей, удобно использовать библиотеку pathlib, в ней путь представлен специальным объектом Path, дополнительные части пути добавляются с помощью прямого слеша, пример:

from pathlib import Path

username = os.getenv("Username")
drive = os.getenv("SystemDrive")
data = Path(drive) / "Users" / username / "example" / "example.txt"
example = open(data, 'r')

Также с помощью этой библиотеки можно проще получить путь к домашней директории пользователя:

from pathlib import Path

data = Path.home() / "example" / "example.txt"
example = open(data, 'r')
→ Ссылка