如何使用变量将文件从网络共享复制到本地磁盘?

17 投票
4 回答
64216 浏览
提问于 2025-04-15 17:53

如果我使用以下这一行代码:

shutil.copyfile(r"\\mynetworkshare\myfile.txt","C:\TEMP\myfile.txt")

一切都运行得很好。不过,我现在搞不明白的是,怎么用一个变量来表示网络共享路径,因为我需要用到'r'(相对路径?)这个标志。最终我想要的结果应该像这样:

source_path = "\\mynetworkshare"
dest_path = "C:\TEMP"
file_name = "\\myfile.txt"

shutil.copyfile(r source_path + file_name,dest_path + file_name)

但是我尝试了不同的方式,都没有成功。

4 个回答

3

这看起来像是一个转义问题——正如balpha所说,r\这个字符变成了字面意思,而不是控制序列。你试过这样做吗:

source_path = r"\\mynetworkshare"
dest_path = r"C:\TEMP"
filename = r"\my_file.txt"

shutil.copyfile(source_path + filename, dest_path + filename)

(在一个交互式的Python会话中,你可以看到以下内容:

>>> source_path = r"\\mynetworkshare"
>>> dest_path = r"C:\TEMP"
>>> filename = r"\my_file.txt"
>>> print (source_path + filename)
\\mynetworkshare\my_file.txt
>>> print (dest_path + filename)
C:\TEMP\my_file.txt
5

这里的 r 是指“原始字符串”,而不是相对路径。当你在字符串前面不加 r 时,Python 会把反斜杠 "\" 当作转义字符来处理。

所以,如果你的字符串里面有反斜杠,你要么在前面加一个 r,要么每个反斜杠都写成两个反斜杠,这样它才会正常显示。

>>> r"\\myfile" == "\\\\myfile"
True
30

你在第一个代码示例中使用的 r 是为了把字符串变成“原始”字符串。简单来说,这意味着这个字符串会把反斜杠看作普通字符,而不会尝试把 \\ 转换成 \

要让你的第二个代码示例正常工作,你需要在字符串前加上 r,而不是在 copyfile 命令里加:

source_path = r"\\mynetworkshare"
dest_path = r"C:\TEMP"
file_name = "\\myfile.txt"

shutil.copyfile(source_path + file_name, dest_path + file_name)

撰写回答