如果我使用下面的行:

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)

但是我有这种方法的不同变型没有运气。

有帮助吗?

解决方案

在第一个代码示例中使用的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)

其他提示

r为“原始字符串”,而不是相对的。当你不r前缀您的字符串,Python将治疗反斜杠“\”作为转义字符。

所以,当你的字符串中包含反斜线,你要么把一个r之前,或者把两个反斜线对于要出现在每个单独的一个。

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

这看起来像一个逃避问题 - 如balpha称,r使得\字符文字,而不是控制序列。您是否尝试过:

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

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

(使用交互式蟒会话,可以看到以下内容:

>>> 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

这是你的榜样路径,很显然,我们正在讨论的Windows OS。 在这个操作系统中使用,接受着一个共同的(C)运行时库Python实现斜线等同于反斜杠。这样,您就能够避免焦炭逃生的问题。

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

请注意该文件名组合物通过 os.path中处理。加入

  

智能地加入一个或多个路径的部件。如果任一组件是一个绝对路径,所有以前的组件(在Windows上,包括前面的驱动器盘符,如果有)都扔掉,并加入继续。返回值是PATH1和任选PATH2等的级联,一个组件之间插入正好一个目录分隔符(os.sep),除非PATH2是空的。需要注意的是在Windows上,因为有一个当前目录为每个驱动器,os.path.join(“C:”,“富”)代表其路径相对当前目录驱动器C:(C:FOO),而不是c :\ FOO

import os
shutil.copyfile(os.path.join(source_path, file_name),
    os.path.join(dest_path, file_name))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top