Открыть файл не в папке со скриптом
Мне надо сделать приложение которое открывает файл в другой папке, не в его. Я узнала что чтоб открыть файл в другой папке нужно перед тем как писать путь написать 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 шт):
К именам переменных 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')