Относительный путь не указывает на нужный каталог - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть следующий код:

import datetime as date
import os
import pdfkit

import getpass #Gets me current username

username = getpass.getuser()

path = f"/home/{username}/Data"
relative_path = os.path.relpath(path, os.getcwd())
destination = os.path.join(relative_path, 'data.pdf')
pdfkit.from_url('www.google.com', f'{destination}/data.pdf')

Я хочу, чтобы PDF-файл был сохранен в windows эквиваленте /home/[username]/datafolder. Мне не нужно использовать linux или ма c, но по академическим причинам c я решил использовать метод относительного пути.

Этот код имеет смысл для меня, но по какой-то причине я хочу, чтобы это был не каталог, потому что когда я указываю путь таким образом, генератор pdf выдает ошибку.

Error: Unable to write to destination                              
Exit with code 1, due to unknown error.

Я знаю, что ошибка в последней строке кода, где я указал '/relative_path/data.pdf'. Не могли бы вы посоветовать, как мне решить эту проблему?


Обновление 1:

По предложению @Matthias я обновил код, но все еще получаю та же ошибка

Обновление 2:

Я пытался:

from pathlib import Path
destination = Path.home()
try:  
    os.mkdir(destination\Data)  
except OSError as error:  
    print(error)  

Но он все еще не указывает на каталог Data


Обновление 3 Я знаю, что все ближе:

import pdfkit
import datetime as date
import calendar
import os.path
import getpass

username = getpass.getuser()

path = f"/home/{username}/Data"
os.makedirs(relative_path, exist_ok=True)
#start = os.getcwd()
relative_path = os.path.relpath(path, os.getcwd())
destination = os.path.join(relative_path, 'data.pdf')

pdfkit.from_url('www.google.com', f'{relative_path}/data.pdf')

В этот момент код выполняется, но папка Data не был создан не могу найти data.pdf. Я получил успешный запуск, хотя:

Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done    

Любые идеи о том, как я могу заставить это работать правильно? Код не выдает папку или файл?

Ответы [ 5 ]

1 голос
/ 22 апреля 2020

Просто проверьте, поместив строкуlative_path перед os.makedirs

Как показано ниже

import pdfkit
import datetime as date
import calendar
import os.path
import getpass

username = getpass.getuser()

#path = os.path.join("home","{username}","Data")
# in case of window you will need to add drive "c:" or "d:" before os.path.sep
path = os.path.join(,"home",username,"Data")
relative_path = os.path.relpath(path, os.getcwd())
os.makedirs(relative_path, exist_ok=True)
#start = os.getcwd()
destination = os.path.join(relative_path, 'data.pdf')

pdfkit.from_url('www.google.com', f'{relative_path}/data.pdf')
1 голос
/ 21 апреля 2020

Вы можете использовать os.environ. Запустите этот маленький скрипт на своей машине:

import os

for key, value in os.environ.items():
    print(key, '-->', value)

и убедитесь сами, что именно вам нужно. Он также переносим.

Допустим, вы хотите получить путь к домашнему каталогу пользователя. Вы можете получить его из os.environ['HOME'] и затем создать путь к целевому каталогу, используя os.path.join(os.environ['HOME'], 'target_directory_name').

Вы не сможете создавать файлы в каталоге, если у вас нет необходимых разрешений, хотя.

1 голос
/ 15 апреля 2020

Возможно, проблема в том, что каталог не существует. Вы можете использовать os.makedirs для создания каталога, используя флаг exist_ok = True, если каталог уже существует. Вот так:

import datetime as date
import os
import pdfkit

import getpass #Gets me current username

username = getpass.getuser()

path = f"/home/{username}/Data"
os.makedirs(path, exist_ok=True)
pdfkit.from_url('www.google.com', f'{path}/data.pdf')
1 голос
/ 15 апреля 2020

Возможно, вы могли бы изменить свою последнюю строку на:

pdfkit.from_url('www.google.com', f'{relative_path}/data.pdf')

, чтобы сохранить ее в домашнем каталоге.

0 голосов
/ 15 апреля 2020

Пользовательские папки в windows хранятся в "/ Users / {username} / *". Я не знаю, пытаетесь ли вы сделать это совместимым для нескольких ОС, но хотите ли вы просто запустить его на windows try:

path = f"/Users/{username}/Data"
start = f"/Users/{username}"

Надеюсь, это сработает .:)

Изменить: Чтобы получить домашний каталог пользователя независимо от ОС, вы можете использовать

from pathlib import Path
home = str(Path.home())

извините за позднее редактирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...