2010-08-03 12 views
51

Wie Sie alle Dateien in einem anderen Verzeichnis in Python kopieren. Ich habe den Quellpfad und den Zielpfad in einer Zeichenfolge.kopieren Sie mehrere Dateien in Python

+0

[Wie kopiere ich ein ganzes Verzeichnis von Dateien in ein bestehendes Verzeichnis mit Python?] (Http://stackoverflow.com/questions/1868714/how-do-i-copy -ein-gesamtes-Verzeichnis-of-files-in-ein-existierendes-Verzeichnis-using-pyth) –

Antwort

69

können Sie os.listdir() verwenden, um die Dateien im Quellverzeichnis zu erhalten, os.path.isfile() zu sehen, ob sie reguläre Dateien (einschließlich der symbolischen Links auf * nix-Systeme) sind, und shutil.copy das Kopieren zu tun.

Der folgende Code kopiert nur die regulären Dateien aus dem Quellverzeichnis in das Zielverzeichnis (ich nehme an, dass keine Unterverzeichnisse kopiert werden sollen).

import os 
import shutil 
src_files = os.listdir(src) 
for file_name in src_files: 
    full_file_name = os.path.join(src, file_name) 
    if (os.path.isfile(full_file_name)): 
     shutil.copy(full_file_name, dest) 
7

Blick auf shutil in the Python docs, insbesondere den copytree Befehl.

+0

Gute Bemerkung, aber es kann keine Option sein, wenn das Verzeichnis aus irgendeinem Grund bereits existiert, wie in meinem Fall. – Sven

12

Wenn Sie nicht den gesamten Baum (mit Unterverzeichnissen usw.) kopieren möchten, verwenden Sie oder glob.glob("path/to/dir/*.*"), um eine Liste aller Dateinamen zu erhalten, durchlaufen Sie die Liste und verwenden Sie shutil.copy, um jede Datei zu kopieren.

for filename in glob.glob(os.path.join(source_dir, '*.*')): 
    shutil.copy(filename, dest_dir) 
+1

Hinweis: Möglicherweise müssen Sie die Glob-Ergebnisse mit os.path.isfile() überprüfen, um sicherzustellen, dass es sich um Dateinamen handelt. Siehe auch GreenMatts Antwort. Während glob nur den Dateinamen wie os.listdir zurückliefert, gibt es dennoch Verzeichnisnamen zurück. Das Muster '*. *' Könnte ausreichen, solange Sie keine extensionlosen Dateinamen oder Punkte in Verzeichnisnamen haben. – Steven

0
import os 
import shutil 
os.chdir('C:\\') #Make sure you add your source and destination path below 

dir_src = ("C:\\foooo\\") 
dir_dst = ("C:\\toooo\\") 

for filename in os.listdir(dir_src): 
    if filename.endswith('.txt'): 
     shutil.copy(dir_src + filename, dir_dst) 
    print(filename) 
1
def recursive_copy_files(source_path, destination_path, override=False): 
""" 
Recursive copies files from source to destination directory. 
:param source_path: source directory 
:param destination_path: destination directory 
:param override if True all files will be overridden otherwise skip if file exist 
:return: count of copied files 
""" 
files_count = 0 
if not os.path.exists(destination_path): 
    os.mkdir(destination_path) 
items = glob.glob(source_path + '/*') 
for item in items: 
    if os.path.isdir(item): 
     path = os.path.join(destination_path, item.split('/')[-1]) 
     files_count += recursive_copy_files(source_path=item, destination_path=path, override=override) 
    else: 
     file = os.path.join(destination_path, item.split('/')[-1]) 
     if not os.path.exists(file) or override: 
      shutil.copyfile(item, file) 
      files_count += 1 
return files_count 
+1

Es könnte helfen, eine verbale Erklärung Ihres Codes zu geben –

+0

Ich denke, du meinst ** überschreiben **, nicht ** überschreiben ** –

Verwandte Themen