我正在尝试将路径存储在变量中。 见下文
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)
不要将
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
,以及不同的参数。
“r”表示该字符串将被视为原始字符串,因此请尝试删除它并使用转义字符
target = "C:\\Users\\{val}\\CodeProjects\\WebSafer".format(val = os.getlogin)
您可以同时使用 f 字符串(直接输入变量)和 r 字符串(输入路径而不使用转义字符,如
\
)。
val = os.getlogin() # Returns username
target = fr"C:\Users\{val}\CodeProjects\WebSafer"
如果您收到
No such file or directory
错误,则意味着实际的文件或文件夹不存在。检查实际路径以确保每个部分(您的用户名、CodeProjects、Websafer)都存在于您的计算机上。
如果您不知道用户的系统上是否有该文件夹,您可以使用 try- except 块来提醒用户或恢复到某个默认文件夹。
这是我建议的解决方案
❯ 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]:
我知道有点晚了,但没关系
抱歉英语不好