Seite 1 von 1

Kopieren von Files

Verfasst: Mittwoch 30. Januar 2019, 08:33
von mgm841
Hallo zusammen,

ich würde mich freuen, wenn jmd mir kurz behilflich sein könnte. Ich habe ein Skript geschrieben, wo Files aus Directory aus dem letzten Tag gefiltert werden, jetzt möchte ich genau diese kopieren, leider funktioniert das nicht. Mein Code sieht wie folgt aus:
import os
from os import walk
import time
import datetime
from datetime import date, timedelta
import zipfile
import io
import shutil

src = 'K:\\Userfiles\\Ucar\\WT_HB-10-App'
dest = 'K:\\Userfiles\\Ucar\\UNZIP'

date1 = date.today() - timedelta(2)



for root, dirs, files in os.walk(src):

for file in files:
if file.endswith('zip'):
x = file[-18:-8]
d = date1.strftime('%Y-%m-%d')

if x==d:
shutil.copyfile(file, dest)
Als Fehler wird ausgegeben:

Traceback (most recent call last):
File "C:\Python37\datetime_finder.py", line 26, in <module>
shutil.copyfile(file, dest)
File "C:\Python37\lib\shutil.py", line 120, in copyfile
with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'getContents_2019-01-28.csv.zip'

Wenn ich mit Print(file ) teste funktioniert das, es werden alle Files von gestern angezeigt. Wie kriege ich das kopiert ?

Re: Kopieren von Files

Verfasst: Mittwoch 30. Januar 2019, 09:16
von __blackjack__
@mgm841: Das ”funktioniert” auch mit `print()` nicht, denn auch da wird Dir nur ``getContents_2019-01-28.csv.zip`` ausgegeben. Das würde nur funktionieren wenn es diese Datei im aktuellen Arbeitsverzeichnis gäbe. Das liegt aber irgendwo unter ``K:\\Userfiles\\Ucar\\WT_HB-10-App``, oder konkreter in dem Pfad der an den Namen `root` gebunden wird. Diese beiden Informationen musst Du mit `os.path.join()` verbinden, *dann* hast Du den kompletten Pfad zur Datei.

Re: Kopieren von Files

Verfasst: Mittwoch 30. Januar 2019, 09:42
von Sirius3
Einfacher geht das Ganze mit pathlib. Einbuchstabige Variablennamen sind immer schlecht, Abkürzungen vermeiden. Das finden des Zeitstempels durch Indexzugriff ist nicht sehr stabil. Gibt es nicht eine andere Möglichkeit?

Code: Alles auswählen

from pathlib import Path
from datetime import date, timedelta

source_path = 'K:/Userfiles/Ucar/WT_HB-10-App'
destination_path = 'K:/Userfiles/Ucar/UNZIP')

search_date = date.today() - timedelta(2)
pattern = '**/*{:%Y-%m-%d}????.zip'.format(search_date)

for filename in Path(source_path).rglob(pattern):
    shutil.copyfile(filename, destination_path )