Seite 1 von 1
Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 14:55
von manti
Hi
und zwar hab ich mir ein kleines Script gebastelt das mir verschiedene Datein in ein anderes Verzeichnis Verschiebt klappt auch ohne Probleme.
So da sich die Pfade eigentlich nie ändern es aber im Ziel Ordner verschiedene Ordner gibt zb. A, B, C will ich das ich im Script nur noch den Namen
vom Ordner angebe per Input und ja das es dann halt die Datein in den Angegeben Ordner verschiebt.
soweit bin ich schon zu beachten bin neu neuling was programmieren angeht :K
Danke!
Code: Alles auswählen
import shutil
import os
import os.path
liste = [".txt", ".png", ".rar", ".gif"]
source = r"Pfad_Ordner"
destination = input("Name Zielordner: ")
for files in os.listdir(source):
if files.endswith(tuple(liste)):
shutil.move(os.path.join(source, files), destination)
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 15:10
von BlackJack
@manti: Und was ist jetzt die Frage oder das Problem?
Die Namen sind teilweise schlecht gewählt. `liste` zum Beispiel ist sehr nichtssagend. Man hätte an der Stelle auch gleich ein Tupel hinschreiben können, dann müsste die Liste nicht für jeden Dateinamen aufs neue in ein Tupel umgewandelt werden.
`files` ist falsch weil es sich weder um mehrere Dateien handelt, noch um eine Datei. Das wird jeweils an einen Datei*namen* gebunden.
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 15:26
von manti
Die Frage ist wie ich das am besten hinbekomme das ich beim Input nur noch den Ordnernamen Eingebe und der mir die Daten in den Ordner verschiebt.
Der Pfad ist immer der Selbe zb. C:\User\manti\Documents im Documents Ordner hab ich jetzt Ordner A B und C und ich will jetzt im Input zb. nur noch Ordner C eintippen und der kopiert mir die Daten in den C Ordner.
Da ich aber 37 Ordner im Documents Ordner habe will ich das nicht alles in den Code Tippen sondern nur den Pfad den er immer nimmt + den Namen vom Ordner der per Input erfolgen soll^^
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 15:38
von BlackJack
@manti: Also wenn Du den Quelltext den Du da bisher hast auch verstanden hast, dann verstehe ich die Frage nicht, denn dann müsstest Du die Antwort schon wissen. Du musst halt den Pfad den Du ins Programm schreibst mit dem Ordnernamen den der Benutzer eingibt, verbinden. Was man dazu braucht, wird im Programm bereits an anderer Stelle verwendet. Du müsstest also nur Dein eigenes Programm verstehen.

Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 16:22
von manti

Ich glaub ich muss mal ne Pause einlegen!
Danke BlackJack!
Keine Ahnung ob du es so gemeint hast ^^ bin halt noch am lernen und den Code hab ich mir aus nem TuT rausgesucht und hab ihn halt dann so verändert das er das macht was ich will also das mit der liste/tuple und mit dem input, keine ahnung ob das nützlich beim Lernen ist
So Problem gelöst hier die Lösung
[codebox=python file=nix.txt]import shutil
import os
import os.path
tuple1 = ".jpg, .txt"
source = r"pfad_fix"
dp = r"pfad_ziel_fix"
destination = input("Pfad zum Ziel: ")
for files in os.listdir(source):
if files.endswith(tuple(tuple1)):
shutil.move(os.path.join(source, files), (os.path.join(dp, destination)))[/code]
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 17:36
von Sirius3
@manti: der Code macht nicht das, was Du denkst. Schau Dir mal "tuple(tuple1)" an.
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 17:55
von manti
Also ne tuple ist ne art liste die nicht verändert werden kann also fest vorgegeben entgegen der liste?
if files.endswith(tuple(tuple1) falls files endenmit tuple also weis er jetzt das er die endungen aus einer tuple bekommt und zwar aus der tuple1. :K
oder reicht es wenn ich tuple = "dateiendung" und dann if files.endswith(tuple) nehme aber kommt ja dann auf selbe :K ist halt einfacher und sieht schöner aus.
Oder bin hier komplett auf dem falschen weg

Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 17:59
von /me
manti hat geschrieben:Oder bin hier komplett auf dem falschen weg

So schwer ist das von Sirius3 vorgeschlagene Prüfen doch nicht.
Code: Alles auswählen
>>> tuple1 = ".jpg, .txt"
>>> tuple(tuple1)
('.', 'j', 'p', 'g', ',', ' ', '.', 't', 'x', 't')
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 18:01
von BlackJack
@manti: `tuple1` ist kein `tuple`. Und wenn es ein `tuple` wäre, dann macht es keinen Sinn `tuple()` mit dem Wert aufzurufen. Und hör auf Dinge einfach nach dem Datentyp zu benennen und verwende einen Bezeichner der beschreibt was der Wert in dem Programm *bedeutet*.
Code: Alles auswählen
In [1]: tuple1 = ".jpg, .txt"
In [2]: type(tuple1)
Out[2]: str
In [3]: tuple(tuple1)
Out[3]: ('.', 'j', 'p', 'g', ',', ' ', '.', 't', 'x', 't')
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 18:49
von manti
So das mit dem tuple versteh ich jetzt schon langsam nur das mit dem (Bezeichner der beschreibt was der Wert in dem Programm *bedeutet*)nicht

Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 19:41
von BlackJack
@manti: Na was sagen Dir die Namen `liste` und `tuple1` darüber was der Wert, der an diesen Namen gebunden ist, *bedeutet*. Du weisst nur das es eine Liste ist oder ein Tupel (wobei letzteres ja nicht einmal stimmte). `filename_extensions` wäre zum Beispiel ein Name der beschreibt was der Wert bedeutet. Und *das* ist es ja letztendlich was man wissen möchte wenn man den Namen irgendwo liest nachdem er definiert wurde.
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 20:05
von manti
So hier das engültige ergebnis aus meiner sicht natürlich
[codebox=python file=mover.txt]import shutil
import os
import os.path
datei_endungen = ".jpg", ".txt", ".rar"
download_verzeichnis = r"pfad_zum_download:"
ziel_verzeichnis = r"pfad_zum_zielverzeichnis"
ziel_ordner = input("Pfad zum Ziel: ")
for files in os.listdir(download_verzeichnis):
if files.endswith(tuple(datei_endungen)):
shutil.move(os.path.join(download_verzeichnis, files), (os.path.join(ziel_verzeichnis, ziel_ordner)))[/code]
Re: Kopiere Datein mit Input Eingabe!
Verfasst: Donnerstag 14. Januar 2016, 23:32
von pillmuncher
@manti: Schau mal:
Code: Alles auswählen
In [1]: datei_endungen = ".jpg", ".txt", ".rar"
In [2]: type(datei_endungen)
Out[2]: builtins.tuple
In [3]: type(tuple(datei_endungen))
Out[3]: builtins.tuple
Warum meinst du, du müsstest in Zeile 11 das Tupel
datei_endungen in ein Tupel umwandeln? Was würde passieren, wenn du das nicht tun würdest?