Wie eine Datei von einer Netzwerkfreigabe auf der lokalen Festplatte mit Variablen kopieren?

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

Frage

Wenn ich die folgende Zeile:

shutil.copyfile(r"\\mynetworkshare\myfile.txt","C:\TEMP\myfile.txt")

alles funktioniert. Was ich jedoch nicht, um herauszufinden, ist offenbar, wie eine Variable mit dem Netzwerk-Freigabe-Pfad zu verwenden, weil ich die ‚r‘ (relative?) Benötigen Flagge. Das Endergebnis ich mir vorstellen würde wäre so etwas wie:

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

shutil.copyfile(r source_path + file_name,dest_path + file_name)

Aber ich habe kein Glück mit verschiedenen Variationen dieses Ansatzes habe.

War es hilfreich?

Lösung

Die r in Ihrem ersten Codebeispiel verwendet wird, so dass die Zeichenfolge ein „raw“ String. In diesem Beispiel, dass die Mittel der String die Schrägstriche sehen und nicht versuchen, sie zu nutzen \\ nur \ zu entkommen.

Um Ihre zweites Codebeispiel Arbeits bekommen, dann würden Sie die r auf den Saiten verwenden, und nicht in dem copyfile Befehl:

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

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

Andere Tipps

Die r ist für "raw string", nicht für relativ. Wenn Sie mit r nicht Präfix der Zeichenfolge tun, wird Python den Backslash „\“ als Escape-Zeichen behandeln.

Also, wenn die Zeichenfolge Schrägstriche enthält, verwenden Sie einen r bevor es setzen, oder setzen Sie zwei Schrägstriche für jeden einzelnen von Ihnen angezeigt werden soll.

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

Das sieht aus wie eine Flucht Ausgabe - wie balpha sagt, macht die r den \ Charakter eine wörtliche, anstatt eine Steuersequenz. Haben Sie versucht:

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

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

(eine interaktive Python-Sitzung verwenden, können Sie die folgenden sehen

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

Von Ihrem Beispiel Pfade, es ist klar, dass wir die Windows OS diskutieren. Python-Implementierung auf dieses Betriebssystem verwenden eine gemeinsame (C) Laufzeitbibliothek, die auf Back-Schrägstriche Schrägstriche als gleichwertig akzeptiert. Auf diese Weise können Escape-Zeichen Probleme vermeiden können.

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

Beachten Sie, dass Dateinamen Zusammensetzung behandelt wird von os.path. beitreten :

  

Nehmen Sie an einer oder mehreren Pfadkomponenten intelligent. Wenn eine Komponente ein absoluter Pfad ist, werden alle vorherigen Komponenten (unter Windows, einschließlich der vorherigen Laufwerksbuchstaben, wenn es eine war) werden weggeworfen, und Verbinden weiter. Der Rückgabewert ist die Verkettung von Pfad1 und Pfad2 optional usw. mit genau einem Verzeichnistrenn (os.sep) zwischen Komponenten eingefügt, es sei denn, path2 leer ist. Beachten Sie, dass unter Windows, da gibt es ein aktuelles Verzeichnis für jedes Laufwerk, os.path.join ( „c:“, „foo“) stellt einen Pfad relativ zum aktuellen Verzeichnis auf Laufwerk C: (c: foo), nicht c :. \ foo

import os
shutil.copyfile(os.path.join(source_path, file_name),
    os.path.join(dest_path, file_name))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top