Dateien aufgrund von Variablen umbenennen, verschieben und löschen
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: Da ist das Python anscheinend zu alt für f-Zeichenketten. Dann müsste man an der Stelle die `format()`-Methode auf Zeichenketten verwenden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hallo blackjack,
danke, aber ich wußte nicht ganz genau wie ich es machen musste. Mit format() hat es nicht geklappt. So mit .format funktioniert es zumindest so weit, das ich Dateien
2019-01-16_RG-Amazon etc. erhalten, was jedoch noch nicht funktioniert ist, das der Teil des alten Namen mit übernommen wird. Also z.B. Ursprung "ReA_Instar Kamera"
neu dann 2019-01-16_RG-Amazon_Instar Kamera
danke, aber ich wußte nicht ganz genau wie ich es machen musste. Mit format() hat es nicht geklappt. So mit .format funktioniert es zumindest so weit, das ich Dateien
2019-01-16_RG-Amazon etc. erhalten, was jedoch noch nicht funktioniert ist, das der Teil des alten Namen mit übernommen wird. Also z.B. Ursprung "ReA_Instar Kamera"
neu dann 2019-01-16_RG-Amazon_Instar Kamera
Code: Alles auswählen
filenames = glob.iglob(os.path.join(SOURCE_PATH, prefix + '*.pdf'))
for old_filename in filenames:
new_filename = os.path.join(TARGET_PATH, '{}_{}.pdf'.format(today, name_part))
os.rename(old_filename, new_filename)
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: Der Teil des Namens wird nicht separiert, ist also nirgends definiert. Das musst Du halt machen, also Code dafür schreiben. Du hast ja den Präfix der weg soll und den gesamten Pfad als Ausgangsdaten. Davon brauchst Du den Dateinamen, und von dem dann nur den Teil nach dem Präfix. Für's erste gibt es eine Funktion in `os.path`, und das zweite sind Grundoperationen bei Zeichenketten die im Tutorial in der Python-Dokumentation vorkommen. Die Länge des Teils ermitteln der nicht im Ergebnis sein soll und dann die entsprechende Teilzeichenkette erstellen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich komme hier irgendwie nicht weiter, könnte mir jemand helfen ?
ich habe os.path eingebaut, jedoch bekomme ich jetzt den Source_Path Ordner angehängt
also Sourcpath lautet ja volume1/xx und als splitname hängt er mir jetzt xx an , ich komme da nicht an den eigentliche Dateinamen hinter dem Prefix_
ich habe os.path eingebaut, jedoch bekomme ich jetzt den Source_Path Ordner angehängt
also Sourcpath lautet ja volume1/xx und als splitname hängt er mir jetzt xx an , ich komme da nicht an den eigentliche Dateinamen hinter dem Prefix_
Code: Alles auswählen
def main():
today = datetime.date.today()
path, splitname = os.path.split(SOURCE_PATH)
splitname = os.path.splitext(splitname)[0]
for prefix, name_part in [
('ReA', 'RG-Amazon'),
('GsA', 'GS-Amazon'),
('ReT', 'RG-Telekom'),
('NoE', 'Notiz-EDV'),
]:
filenames = glob.iglob(os.path.join(SOURCE_PATH, prefix + '*.pdf'))
for old_filename in filenames:
new_filename = os.path.join(TARGET_PATH, '{}_{}_{}.pdf'.format(today, name_part, splitname))
os.rename(old_filename, new_filename)
if __name__ == '__main__':
main()
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: Wo steht denn die Information die mit in den Zielnamen soll? In `SOURCE_PATH`? Doch wohl eher nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
@blackjack wenn Source Path nur der Quellpfad ist und nicht die Dateien darin wiedergibt, dann dort nicht, aber wie gebe ich den Pfad dort als variabel an und begrenze es dann auf den Part nach dem Prefix_ ?
Ich komme da einfach nicht weiter.
Ich komme da einfach nicht weiter.
Code: Alles auswählen
splitname = os.path.basename('volume1\xx\*.pdf')
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: An der Stelle gar nicht, Du brauchst ja einzelne, konkrete Dateinamen um Informationen daraus zu extrahieren. Und diese Dateinamen kennst Du ja vor der Abfrage der Dateinamen noch nicht. Also kannst Du an die Informationen auch erst heran kommen wenn Du die Dateinamen, also Informationen, vorliegen hast.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: Du brauchst den Dateinamen aus dem Du etwas extrahieren willst. Wo hast Du den denn? Tipp: Den brauchst Du ja zum Umbenennen, also *musst* Du den ja haben. Und irgendwo zwischen dem Punkt wo Du den jeweils einzelnen alten Dateinamen bekommst und dem umbenennen, musst Du da Deine Infos heraus holen. Das muss vor dem umbenennen passieren, weil Du die Infos ja für den neuen Dateinamen benötigst, den Du wiederum zum umbenennen benötigst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
hmmm, an dieser stelle muss das doch vorliegen oder ?
wenn ich darunter dies einfüge, bekomme ich alle Dateinamen vom Typ PDF =:-( wie bekomme ich jetzt noch den EINEN richtigen Dateinamen und dann noch die Hürde nur alles hinter dem _
Code: Alles auswählen
filenames = glob.iglob(os.path.join(SOURCE_PATH, prefix + '*.pdf'))
Code: Alles auswählen
splitnames = [os.path.basename(fpath) for fpath in glob.glob("/volume1/xx/*.pdf")]
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: Ich geb''s auf. Solltest Du vielleicht auch wenn Du den alten Dateinamen brauchst, und in den paar Zeilen Code es nicht schaffst den zu finden. Wahrscheinlich ist der einfach zu schlecht benannt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
ja wahrscheinlich hast du recht, doch ein fertiges Programm....
Hier sollte die Datei vorhanden sein, aber auch mit filenames in dem os.path teil bekomme ich da nichts sinnvolles raus..
Hier sollte die Datei vorhanden sein, aber auch mit filenames in dem os.path teil bekomme ich da nichts sinnvolles raus..
Code: Alles auswählen
filenames = glob.iglob(os.path.join(SOURCE_PATH, prefix + '*.pdf'))
"filenames" deutet Mehrzahl an. Sind da nicht alle Dateien drin?
In Python benutzt man sprechende Variablennamen, die direkt auf den Inhalt schließen lassen und leicht verständlich sind. Wie würdest du eine Variable benennen, die auf den alten Dateinamen verweist?
In Python benutzt man sprechende Variablennamen, die direkt auf den Inhalt schließen lassen und leicht verständlich sind. Wie würdest du eine Variable benennen, die auf den alten Dateinamen verweist?
ich würde sie old_filename benennen, aber ich sehe hier nicht das old_filename irgendwie definiert ist und komme damit auch nicht weiter.
hier kommen alle pdf namen und nicht der eine der gerade umbenannt wird.
Vielleicht könnte mir ja jemand mit einem stück code weiterhelfen, ich würde nur für diese eine Problem eine Lösung suchen und habe mit pyhton bislang nichts gemacht,
deshalb fällt es schwer, das alles so auf einmal anzuwenden.
Code: Alles auswählen
filenames = glob.iglob(os.path.join(SOURCE_PATH, prefix + '*.pdf'))
for old_filename in filenames:
new_filename = os.path.join(TARGET_PATH, '{}_{}_{}.pdf'.format(today, name_part, NUR DEN TEXT HINTER _))
os.rename(old_filename, new_filename)
hier kommen alle pdf namen und nicht der eine der gerade umbenannt wird.
Code: Alles auswählen
splitname = [os.path.basename(fpath) for fpath in glob.glob("/volume1/TD/*.pdf")]
deshalb fällt es schwer, das alles so auf einmal anzuwenden.
- __blackjack__
- User
- Beiträge: 13112
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@novregen: Du siehst in dem Code `old_filename` nicht? Äh… das steht da aber. Einmal wo der Wert für jeden Schleifendurchlauf definiert wird und einmal da wo der Wert zum umbenennen verwendet wird. Umbenennen würde ohne ja gar nicht funktionieren – woher sollte die `rename()`-Funktion sonst wissen was umbenannt werden soll‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman