Kopiere Datein mit Input Eingabe!

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.
Antworten
manti
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2016, 14:43

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)
Zuletzt geändert von Anonymous am Donnerstag 14. Januar 2016, 15:06, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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.
manti
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2016, 14:43

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^^
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. ;-)
manti
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2016, 14:43

:D 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 :D
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]
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@manti: der Code macht nicht das, was Du denkst. Schau Dir mal "tuple(tuple1)" an.
manti
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2016, 14:43

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 :D
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

manti hat geschrieben:Oder bin hier komplett auf dem falschen weg :D
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')
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')
manti
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2016, 14:43

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 :?
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.
manti
User
Beiträge: 6
Registriert: Donnerstag 14. Januar 2016, 14:43

So hier das engültige ergebnis aus meiner sicht natürlich :D
[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]
Benutzeravatar
pillmuncher
User
Beiträge: 1532
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@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?
In specifications, Murphy's Law supersedes Ohm's.
Antworten