簡體   English   中英

如何使用變量將文件從網絡共享復制到本地磁盤?

[英]How to copy a file from a network share to local disk with variables?

如果我使用以下行:

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)

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

從您的示例路徑,我們很清楚我們正在討論Windows OS 此操作系統上的Python實現使用一個公共( C )運行時庫,它接受正斜杠等效於反斜杠。 這樣就可以避免出現轉義問題。

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

請注意,文件名組合由os.path.join處理:

智能地加入一個或多個路徑組件。 如果任何組件是絕對路徑,則拋棄所有先前組件(在Windows上,包括之前的驅動器號,如果有的話),並繼續加入。 返回值是path1和可選的path2等的串聯,只有一個目錄分隔符(os.sep)插入組件之間,除非path2為空。 請注意,在Windows上,由於每個驅動器都有一個當前目錄,os.path.join(“c:”,“foo”)表示相對於驅動器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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM