相对路径未指向所需目录

Relative path not pointing to desired directory

我有以下代码:

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 或 mac 但出于学术原因我决定使用相对路径方法。

这段代码对我来说很有意义,但出于某种原因,它不是我想要的目录,因为当我以这种方式指定路径时,pdf 生成器会生成错误。

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

我知道错误出现在我指定“/relative_path/data.pdf”的最后一行代码中。你能告诉我如何解决这个问题吗?


更新 1:

按照@Matthias 的建议,我已经更新了代码,但我仍然遇到同样的错误

更新二:

我试过了:

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    

关于如何让它正常工作的任何想法?代码没有生成文件夹或文件?

也许你可以将最后一行更改为:

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

为了让它保存到主目录。

windows 中的用户文件夹存储在“/Users/{username}/*”中。我不知道你是否想让它与多个 OS 兼容,但如果你只想在 windows 上制作这个 运行,请尝试:

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

希望它有用。:)

编辑: 要获取用户的主目录而不考虑 OS 你可以使用

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

抱歉编辑晚了。

可能是目录不存在的问题。您可以使用 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')

您可以使用 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').

创建目标目录的路径

不过,如果您没有所需的权限,您将无法在目录中创建文件。

只要把 relative_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')