相对路径未指向所需目录
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')
我有以下代码:
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')