如何使用变量将文件从网络共享复制到本地磁盘?
如果我使用以下这一行代码:
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)