Dateien aufgrund von Variablen umbenennen, verschieben und löschen

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.
novregen
User
Beiträge: 15
Registriert: Montag 14. Januar 2019, 11:49

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_

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()
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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
novregen
User
Beiträge: 15
Registriert: Montag 14. Januar 2019, 11:49

@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.

Code: Alles auswählen

splitname = os.path.basename('volume1\xx\*.pdf')
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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
novregen
User
Beiträge: 15
Registriert: Montag 14. Januar 2019, 11:49

muss ich das in die for schleife reinschreiben, oder wie stelle ich das an ?
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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
novregen
User
Beiträge: 15
Registriert: Montag 14. Januar 2019, 11:49

hmmm, an dieser stelle muss das doch vorliegen oder ?

Code: Alles auswählen

filenames = glob.iglob(os.path.join(SOURCE_PATH, prefix + '*.pdf'))
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

splitnames = [os.path.basename(fpath) for fpath in glob.glob("/volume1/xx/*.pdf")]
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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. :twisted:
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
novregen
User
Beiträge: 15
Registriert: Montag 14. Januar 2019, 11:49

ja wahrscheinlich hast du recht, doch ein fertiges Programm.... :evil:

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'))
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

"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?
novregen
User
Beiträge: 15
Registriert: Montag 14. Januar 2019, 11:49

ich würde sie old_filename benennen, aber ich sehe hier nicht das old_filename irgendwie definiert ist und komme damit auch nicht weiter.

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")]
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.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
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
Antworten