Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用变量将文件从网络共享复制到本地磁盘?_Python_Network Programming_Share - Fatal编程技术网

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

Python 如何使用变量将文件从网络共享复制到本地磁盘?,python,network-programming,share,Python,Network Programming,Share,如果我使用以下行: 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 +

如果我使用以下行:

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
,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)
(使用交互式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

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

从您的示例路径可以明显看出,我们正在讨论
Windows操作系统
。 此操作系统上的Python实现使用一个通用(
C
)运行时库,该库接受与反斜杠等效的正斜杠。这样可以避免转义字符问题

source_path = "//mynetworkshare"
dest_path = "C:/TEMP"
file_name = "/myfile.txt"
请注意,文件名组合由以下人员处理:

智能地连接一个或多个路径组件。如果任何组件是绝对路径,则会丢弃所有以前的组件(在Windows上,包括以前的驱动器号,如果有),并继续连接。返回值是使用一个目录分隔符(os.sep)连接path1和path2等插入组件之间,除非path2为空。请注意,在Windows上,由于每个驱动器都有一个当前目录,因此os.path.join(“c:,“foo”)表示相对于驱动器c:(c:foo)上当前目录的路径,而不是c:\foo


另外,我建议您查看
os.path
库。然后您可以将
file\u name=“\\myfile.txt”
替换为
file\u name=“myfile.txt”
shutil.copyfile(source\u path+file\u name,dest\u path+file\u name)
替换为
shutil.copyfile(os.path.join(source\u path,file\u name),os.path.join(dest_path,file_name))
,它可以跨平台工作。谢谢,这正是我要找的。想想看,我一直认为它代表一个正则表达式-谢谢!
import os
shutil.copyfile(os.path.join(source_path, file_name),
    os.path.join(dest_path, file_name))