如何将变量放入路径中

问题描述 投票:0回答:4

我正在尝试将路径存储在变量中。 见下文

target = r"C:\Users\User\CodeProjects\WebSafer"

但是,我需要它是动态的。没有硬编码到我的用户名,所以我通过以下方式获取登录用户名:

val = os.getlogin()

所以我需要将变量

val
放入路径中。但每次我尝试这样做时,我总是会遇到截断/语法错误。请帮我!下面是代码片段:

print("No copy found...making a copy\n")

val = os.getlogin()

original = r"C:\*******\********\*******\***\****"
target = r"C:\Users\User\CodeProjects\WebSafer"
shutil.copy(original, target)

“*”只是出于隐私原因,实际上替换为我正在复制的内容的正确路径位置。

到目前为止我尝试过的:

target = r"C:\Users\{val}\CodeProjects\WebSafer".format(val = os.getlogin)
target = r"C:\Users\{}\CodeProjects\WebSafer".format(val)
target = rf"C:\Users\{val}\CodeProjects\WebSafer".format(val = os.getlogin)
target = rf"C:\Users\{}\CodeProjects\WebSafer".format(val)
python syntax shutil
4个回答
0
投票

不要将

f
.format
混合,这对我有用:

import os

val = os.getlogin()
print(rf"C:\Users\{val}\CodeProjects\WebSafer")

我认为更好的方法是:

import os.path
from pathlib import Path

home = str(Path.home())
print(os.path.join(home, "CodeProjects\WebSafer"))

那么如果你在复制时遇到一些错误,你需要明确你要复制什么,复制一个文件,还是一个文件夹,如果是文件夹,应该复制到dest文件夹中,还是覆盖dest文件夹
您可能想尝试不同的方法,例如

shutil.copy
shutil.copytree
,以及不同的参数。


0
投票

“r”表示该字符串将被视为原始字符串,因此请尝试删除它并使用转义字符

target = "C:\\Users\\{val}\\CodeProjects\\WebSafer".format(val = os.getlogin)


0
投票

您可以同时使用 f 字符串(直接输入变量)和 r 字符串(输入路径而不使用转义字符,如

\
)。

val = os.getlogin() # Returns username
target = fr"C:\Users\{val}\CodeProjects\WebSafer"

如果您收到

No such file or directory
错误,则意味着实际的文件或文件夹不存在。检查实际路径以确保每个部分(您的用户名、CodeProjects、Websafer)都存在于您的计算机上。

如果您不知道用户的系统上是否有该文件夹,您可以使用 try- except 块来提醒用户或恢复到某个默认文件夹。


0
投票

这是我建议的解决方案


❯ ipython
Python 3.11.7 (tags/v3.11.7:fa7a6f2, Dec  4 2023, 19:24:49) [MSC v.1937 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.19.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from getpass import getuser

In [2]: getuser
Out[2]: <function getpass.getuser()>

In [3]: getuser()
Out[3]: 'kinite'

In [4]: path = rf"C:\Users\User\{getuser()}\WebSafer"

In [5]: path
Out[5]: 'C:\\Users\\User\\kinite\\WebSafer'

In [6]:

我知道有点晚了,但没关系
抱歉英语不好

© www.soinside.com 2019 - 2024. All rights reserved.