Kopieren mit Datum

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

Hallo,

Bin neu hier und habe mal eine Frage:

Wie bekomme ich es hin eine Datein oder Verzeichnisse zu kopieren mit Datums Anhang.

Hier mal ein Auszug aus dem Code.

original = c:/text.txt
kopie = e:/text.txt
down='C:/AMD'
down1='E:/AMD'
datum = ('Datum: ')


def dialog2():
var2 = shutil.copy(original, kopie,(Datum))
Button2 = Button(fenster,text="Kopieren Test zu Kopie Datei", command=dialog2) # Erzeugen des Button2 mit Funktion
Button2.pack ()

def dialog3():
var3 = shutil.copytree(down, down1)
Button3 = Button(fenster,text="Verzeichniss Kopieren", command=dialog3) # Erzeugen des Button3 mit Funktion
Button3.pack ()



Es soll hinter den Verzeichnis Name das >Datum mit stehen z.B. AMD-27.09.2016
Es soll hinter den Verzeichnis Name das >Dateium mit stehen z.B. test-27.09.2016.txt

Oder sollte man vielleicht vorher das Verzeichnis / Datei umbenenne, den es wird ja nicht überkopiert damit den den auf den neusten stand ist.
Das ganze soll den so eine art Backup werden zum sichern von datein und Verzeichnise.

Ich habe schon eine menge versucht, aber bekomme es nicht so hin.

Das mit den Datei Kopieren geht ja, die wird auch immer überschrieben nur halt das Verzeichnis wir nicht überschrieben und es gibt ein fehler, deshalb sollte das Datum mit am Name ran.
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

dann solltest du den ordner mit dem name inkl. datum erstellen, und dann deine datei dahin kopieren.
oder soll die kopierte datei das datum im name enthalten.

ist halt abhängig wie oft du kopierst. und wie viele ordner du haben möchtest.
sinnvoll wäre ebenfalls wenn du das datumsformat YYYYMMDD-AMD wählst. so werden die ordner chronologisch sortiert angezeigt.
punkte in benennungen würde ich vermeiden.
empty Sig
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Olds: Dateinamen sind ja nichts anderes als Strings, also kannst Du das Datum einfach hinten dran hängen: "{}-{}".format(kopie, datum)
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

harryberlin hat geschrieben:dann solltest du den ordner mit dem name inkl. datum erstellen, und dann deine datei dahin kopieren.
oder soll die kopierte datei das datum im name enthalten.

ist halt abhängig wie oft du kopierst. und wie viele ordner du haben möchtest.
sinnvoll wäre ebenfalls wenn du das datumsformat YYYYMMDD-AMD wählst. so werden die ordner chronologisch sortiert angezeigt.
punkte in benennungen würde ich vermeiden.

Wäre auch nicht schlecht vorher einen Ordner mit den Datum zu erstellen und das den jedes mal wenn man ein Backup mache das die ordner den mit Datum sind.

1 Ordner würde reichen , z.B AMD-29.09.2016 / Die ganzen kopierten Programmen
AMD-30.09.2016 / Die ganzen kopierten Programmen

Solche Verzeichnisse sollte man den vorher erstellen lassen vom Programm, und in den Verzeichnisse sollen den die Daten rein Kopiert werden.

Da ich oft meinen Computer ein neues BS verpasse / Windows 7 64bit, wurde mir das ganze die Arbeit erleichtern um die ganzen Daten zu sichern.

Schlecht wäre es auch nicht wenn man die Sicherung Pfade von einer Datei rein lesen lassen würde vorher was zu sichern ist.
Den ist es variabler und man könnte die Pfade schnell selber ändern in der .txt Datei.

z.B.
c:/test.exe
c:/Download/test.exe

usw.

Ich hoffe das es verständlich war.

Schlecht wäre auch nicht wenn man den Sicherungs.-Pfad auch per .txt einlesen lassen könnt.

O man O , da habe ich mir aber viel vor genommen :shock: und fange doch er an mit Python :mrgreen:
Zuletzt geändert von Olds am Dienstag 27. September 2016, 20:22, insgesamt 1-mal geändert.
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

Sirius3 hat geschrieben:@Olds: Dateinamen sind ja nichts anderes als Strings, also kannst Du das Datum einfach hinten dran hängen: "{}-{}".format(kopie, datum)
Danke für den TIP ich versuche es mal ob ich es hin bekomme.

Schlecht wäre auch nicht wenn es ein Ordner mit Datum ist.

def dialog2():
var2 = shutil.copy "{}-{}".format(kopie, datum)
Button2 = Button(fenster,text="Kopieren Test zu Kopie Datei", command=dialog2) # Erzeugen des Button2
Button2.pack ()

Meinst du das so? irgenwie kommt da ein Fehler :shock:
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

ein verzeichnis ist doch ein ordner.
oder gibt es hierbei definitions probleme?
ich komme nicht ganz mit was du willst.
irgendwie passen manche wörter in deinem text nicht zusammen.
empty Sig
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

harryberlin hat geschrieben:ein verzeichnis ist doch ein ordner.
oder gibt es hierbei definitions probleme?
ich komme nicht ganz mit was du willst.
irgendwie passen manche wörter in deinem text nicht zusammen.

Das kann ich verstehen, ist vielleicht nicht gut beschrieben.

Den mal etwas einfacher, ich hoffe das bekomme ich hin ?

Ein Ordner erstellen mit Datum z.B AMD-27.09.2016
und in den sollen den Dateien kopiert werden.

Da man ja die Pfade immer im Programm ändern muss wenn mal was dazu kommt, könnte man doch auch bestimmt die zu sichernden Daten aus eine .txt Dateien auslesen z.B c:/text.txt / c:/download/test.txt

Und um es noch spanender zu machen, könnte man auch noch eine .txt rein lesen mit den Pfad wo hin es gesichert werden soll. z.B. e:/AMD-27.09.2016

Kamm es jetzt vielleicht besser rüber?
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

also du hast z.B. Dateien in einem source-ordner
abc.pdf
def.xls
ghij.doc
klm.bmp

und diese willst du in einen neuen ordner(destination-ordner) kopieren, der genauso heißen soll wie der source-ordner + das aktuelle datum.
die source-dateien werden dann einfach nur kopiert, ohne umbenennung.
und es soll zusätzlich eine txt-datei erzeugt werden, die wie der destination-ordner heißt, mit dem inhalt der dateinamen aus dem source-ordner.
zwar nicht verständlich warum, denn die dateinamen sind ja vorhanden. aber ok.

ich würde so vorgehen:
1. name vom source ordner einlesen oder definieren
2. aktuelles datum holen
3. destination ordern erstellen
4. txt datei erstellen
5. datei für datei kopieren und nach fehlerfreier kopie, den dateiname in die txt schreiben.
empty Sig
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

harryberlin hat geschrieben:also du hast z.B. Dateien in einem source-ordner
abc.pdf
def.xls
ghij.doc
klm.bmp

und diese willst du in einen neuen ordner(destination-ordner) kopieren, der genauso heißen soll wie der source-ordner + das aktuelle datum.
die source-dateien werden dann einfach nur kopiert, ohne umbenennung.
Ja genau bis dahin haste alles richtig erkannt.

die config1.txt Datei sollte man vielleicht vorher rein lesen lassen, den da sollen den die Pfade von den Dateien rein die kopier werden soll, in den Ordner mit Datum.

Und vielleicht noch ein Config2.txt wo der sicherungs Pfad hin soll, wo es hin kopiert werden soll.

Man ist nicht leicht das zu beschreiben was man so im Kopf hat :K
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

irgendwie komme ich mit deiner "den", "denn", "dann"-schwäche nicht klar.
muss dein text immer mindestens 3mal lesen, um ihn zu verstehen.

was hast du denn nun schon programmiert?

als config-datei bietet sich xml an.
empty Sig
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

harryberlin hat geschrieben:irgendwie komme ich mit deiner "den", "denn", "dann"-schwäche nicht klar.
muss dein text immer mindestens 3mal lesen, um ihn zu verstehen.

was hast du denn nun schon programmiert?

als config-datei bietet sich xml an.
from tkinter import *
from tkinter import messagebox
import shutil
from datetime import datetime
from datetime import timedelta
from time import mktime
from datetime import date
now = date.today()


fenster = Tk() # Fenster erstellen
fenster.title("BaCKi") # Fenster Name
fenster.geometry("275x210+650+250") # Fenster Größe

ori='D:/test.txt'
kopie='E:/kopie.txt'
down='C:/AMD'
down1='E:/AMD'
datum = ('Datum: ')

def closewindow(): # Zuweisung Button Exit
exit()

def dialog1():
var = messagebox.showinfo("Info") # MessageBox Button Info
Button1 = Button(fenster,text="Info", command=dialog1) # Erzeugen des Button1
Button1.pack ()

def dialog2():
var2 = shutil.copy(ori, kopie,)
Button2 = Button(fenster,text="Kopieren Test zu Kopie Datei", command=dialog2) # Erzeugen des Button2
Button2.pack ()

def dialog3():
var3 = shutil.copytree(down, down1)
Button3 = Button(fenster,text="Verzeichniss Kopieren", command=dialog3) # Erzeugen des Button3
Button3.pack ()

Button6 = Button(fenster,text="Exit", command=closewindow) # Erzeugen des Button6
Button6.pack ()

fenster.mainloop()

Ist noch nicht viel
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

dann wandel doch jetzt mal das now in ein datum string um und erstelle den destination-ordner.
empty Sig
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

harryberlin hat geschrieben:dann wandel doch jetzt mal das now in ein datum string um und erstelle den destination-ordner.
So ein Ordner habe ich schon mal, nur mit den Datum anhängen klappt nicht so, bekomme schon ein Fön hier. :roll:

import time

# print current date and time
print(time.strftime("%d.%m.%Y "))

def dialog3():
var3 = shutil.copytree(down, down1)
Button3 = Button(fenster,text="Verzeichniss Kopieren", command=dialog3) # Erzeugen des Button3
Button3.pack ()

wäre nett wenn du mir mal die Lösung schreiben könntest, zur NOT würde auch eine Aufzählung gehen z.B. AMD1 - AMD2 , usw
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

wie schaut die funktion zum ordner erstellen denn aus?
benutz bitte mal die code tags, wenn du code einfügst.
was macht immer das var davor?
empty Sig
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Olds: wie man ein Datum an einen Datei-/Verzeichnisnamen (aka String) anhängt, habe ich Dir schon im zweiten Post hier im Thread gezeigt. Was hast Du also versucht und was passiert dann (Fehlermeldung?)?
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

Sirius3 hat geschrieben:@Olds: wie man ein Datum an einen Datei-/Verzeichnisnamen (aka String) anhängt, habe ich Dir schon im zweiten Post hier im Thread gezeigt. Was hast Du also versucht und was passiert dann (Fehlermeldung?)?

Den werde ich die Zeichen von dir nicht auf die reihe bekommen, ist egal.

Kann ja auch möglich sein, das ich zu Dumm für die Sprache bin oder die Sprache zu Dumm für mich :?:

Oder die Lösung ist so leicht das man es nicht sieht 8)

Ich habe doch geschrieben das habe das ich NEU hier bin, den hättest mir ja auch den ganzen Text schreiben können wenn du so nett gewesen wirst.

Verzeichnis erstellen, habe ich hin bekommen

1 Datei kopieren geht auch und wird auch ersetz ohne Fehler

Verzeichnis wird auch kopiert, es kommt aber zum Fehler wenn das Verzeichnis schon besteht.

Vielleicht sollte ich mal zu einer anderen Sprache schauen, kann ja sein das die mir besser liegt :cry: c , Java, VB, ......
BlackJack

@Olds: Ich weiss nicht ob es in einer anderen Programmiersprache besser läuft. Du fängst gleich mit GUI-Programmierung an, was keine gute Idee ist, weil man dafür eigentlich fortgeschrittener sein muss und objektorientierte Programmierung schon verstanden haben sollte.

Du mischst Hauptprogramm und Funktionsdefinitionen auf Modulebene und verwendest einen Sternchen-Import und globale Variablen. Dazu teils nichtssagende und unsinnigerweise nummerierte Namen. Funktionen werden üblicherweise nach der Tätigkeit benannt die sie durchführen. `dialogx` ist keine Tätigkeit, und wer so einen Funktionsnamen liest hat keine Ahnung wofür der Dialog steht und was darin eingegeben werden kann.

Es werden Werte an Namen gebunden, die danach nie wieder verwendet werden. Auf letzteres angesprochen kam keine Reaktion. Ebenso bei der Nachfrage was Du denn nun genau gemacht hast und welche Fehler genau gekommen sind. Quelltext und 1:1-Kopie des Tracebacks wären hilfreich wenn man dazu etwas sagen können soll. Sonst können wir nur sagen, dass Du wohl irgend etwas falsch machst. Und höchstens raten *was* das genau ist.

Ebenfalls vermischt werden Benutzerinteraktion und die eigentliche Programmlogik. Wenn letzteres in eigenen Funktionen stehen würde, könnte man das ohne in der GUI herumklicken zu müssen, testen.
Olds
User
Beiträge: 9
Registriert: Dienstag 27. September 2016, 16:48

So hier mal mein kleinen Text.

Code: Alles auswählen

import os
from tkinter import *
from tkinter import messagebox
import shutil
from datetime import datetime
from time import mktime
from datetime import date
import time

fenster = Tk()                          # Fenster erstellen
fenster.title("Kopieren")               # Fenster Name
fenster.geometry("275x210+650+250")     # Fenster Größe

datum= (time.strftime("%d.%m.%Y "))
pfad = 'e:/Backi-'+datum             # Verzeichniss erstellen mit Datum
if not os.path.exists(pfad):         # Verzeichniss prüfen
   os.makedirs(pfad)

ori='D:/test.txt'
kopie='E:/Backi-,(+datum")/test.txt'
down='C:/Down-1'
down1='E:/Backi-'

def closewindow():                   # Zuweisung Button Exit
    exit()
    
def dialog2():
    shutil.copy(ori, kopie, )
Button2 = Button(fenster,text="Kopieren von Dateien", command=dialog2) # Erzeugen des Button2
Button2.pack ()

def dialog3():
    shutil.copytree(down, down1,)
Button3 = Button(fenster,text="Verzeichniss Kopieren", command=dialog3) # Erzeugen des Button3
Button3.pack ()

def dialog4():
    messagebox.showinfo("Datum", datum)                    # MessageBox Datum Butten 4
Button4 = Button(fenster,text="Datum",command=dialog4)     # Erzeugen des Button4
Button4.pack ()

Button6 = Button(fenster,text="Exit", command=closewindow) # Erzeugen des Button6
Button6.pack ()

fenster.mainloop()
Das erstellen eines Verzeichnis Backi-29.09.2016 , also mit Datum funktioniert.

Es soll aber Dateien und Verzeichnisse kopiert werden in das Verzeichnis Backi-" Datum " was aber leider nicht passiert, und da liegt das Problem
was muss ich da eintragen damit des alles in das Verzeichnis kopiert wird.

Die Fehler könnt ihr ja schauen wenn ihr es ausführt.

Ee ist noch kein Meister vom Himmel gefallen :mrgreen:
Zuletzt geändert von Anonymous am Donnerstag 29. September 2016, 07:43, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

1. code mit code tags einfügen
2. bei kopie ist ein " drin
3. dein programm wird vermutlich niemand testen, wenn schon du zu faul bist, die fehlermeldung hier rein zu kopieren. is schon bissl unverschämt, das auch noch offensichtlich zu machen.
zudem, warum soll ich mir mein intel und nvidia rechner mit daten zu müllen die amd, test, und ein schlechtes datumsformat für ein verzeichnis enthalten?
4. nutz bitte os.path.join() um pfade und dateipfade zu kombinieren.
5. räume bitte mal die ganze importe im kopf auf. nicht alles ist notwendig.
6. kopieren hatten wir erst: viewtopic.php?f=1&t=39097
empty Sig
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Olds: Du frägst 5 mal, wie man ein Verzeichnis mit Datum macht, was soll ich da anderes antworten, als dass man das Dir schon ganz am Anfang geschrieben hat. Und siehe da, Zeile 14-17 erzeugt ein Verzeichnis mit Datum. Jetzt solltest Du dieses Wissen aber auf Deine anderen Fälle auch übertragen können und da können wir Dir schlecht helfen. Wenn Du die Zuweisung der Variable kopie anschaust, was fällt Dir da auf? Die Kopie in dialog2 wird schief laufen weil es das Verzeichnis »E:/Backi-,(+datum")« höchst wahrscheinlich nicht gibt. Und natürlich enthält der Verzeichnisnamen kein Datum, ebensowenig down1, wenn Du versuchst in dialog3 ein ganzes Verzeichnis zu kopieren. Raten, Hoffen und Zufall helfen beim Programmieren wenig. Du mußt Dein Problem in Teilprobleme aufteilen, Dateinamen mit Datum definieren und Dateien kopieren, wobei Du schon beide gelöst hast, und dann die Teillösungen zur Gesamtlösung wieder zusammensetzten.
Antworten