하는 방법 파일을 복사 네트워크에서 공유하는 로컬 디스크 가 변수는?

StackOverflow https://stackoverflow.com/questions/2042342

문제

내가 사용하는 경우 다음과 같은 라인:

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은 Backslash를 취급합니다.\"탈출 캐릭터로.

그래서 당신의 스트링에는 백 슬래시가 포함되어 있으면 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. 이 OS에서의 파이썬 구현은 공통을 사용합니다 (C) 앞쪽 슬래시를 백 슬래시와 동등한 것으로 받아들이는 런타임 라이브러리. 이렇게하면 탈출 숯 문제를 피할 수 있습니다.

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

파일 이름 구성은 처리됩니다 os.path.join:

하나 이상의 경로 구성 요소를 지능적으로 결합하십시오. 어떤 구성 요소가 절대 경로 인 경우, 이전 구성 요소 (이전 드라이브 문자를 포함한 Windows에서)가 버려지고 결합이 계속됩니다. 반환 값은 PATH2가 비어 있지 않는 한 정확히 하나의 디렉토리 분리기 (OS.SEP)가 삽입 된 PATH1 및 선택적으로 PATH2 등을 연결하는 것입니다. Windows에서는 각 드라이브에 대한 현재 디렉토리가 있으므로 OS.Path.join ( "C :", "Foo")이 있으므로 C : (C : Foo)의 현재 디렉토리와 관련된 경로를 나타냅니다. : 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