novregen
Goto Top

Dateien Umbenennen mit Python

Hallo,

ich würde gerne Dokumente die bestimmte Kürzel haben umbennen, in einen anderen Ordner speichern und dann die Urpsrungsdatei löschen.

Ein einfaches umbenennen bekomme ich hin aber ich würde gerne nach mehreren Kürzeln suchen und entsprechend umbenennen lassen.

Datei enthält ReA_ -> YYYY_MM_TT_RG_Amazon_Ursprungstext
Datei enthält Telekom -> YYYY_MM_TT_RG_Telekom
Datei enthält Str_ -> YYYY_MM_TT_RG_Hausstrom
etc.


Wie muss ich erweitern ?

import os
import datetime

src = '/volume1/homes/XX/test.pdf'
dst = '/volume1/homes/XX/%s-text.pdf' % datetime.datetime.now()
os.rename(src, dst)

Vielen Dank.

Content-ID: 397620

Url: https://administrator.de/contentid/397620

Ausgedruckt am: 21.11.2024 um 20:11 Uhr

137846
137846 09.01.2019 aktualisiert um 21:19:42 Uhr
Goto Top
Zitat von @novregen:
Wie muss ich erweitern ?
Tipp :
- os.listdir
- shutil.move()
Und jetzt selbst Doku lesen und lernen, dann lernst du auch was und nicht nur Copy n' Paste ...

Gruß A.
Pjordorf
Pjordorf 09.01.2019 aktualisiert um 17:48:34 Uhr
Goto Top
Hallo,

Zitat von @novregen:
ich würde gerne Dokumente die bestimmte Kürzel haben umbennen, in einen anderen Ordner speichern und dann die Urpsrungsdatei löschen.
shutil hilft dir bestimmt weiter.
https://www.pythoncentral.io/how-to-rename-move-a-file-in-python/
https://www.pythonforbeginners.com/os/python-the-shutil-module
https://www.tutorialspoint.com/How-to-move-a-file-from-one-folder-to-ano ...
https://stackoverflow.com/questions/41826868/moving-all-files-from-one-d ...

Gruß,
Peter
novregen
novregen 14.01.2019 um 11:32:26 Uhr
Goto Top
Aber bei shutil geht es doch nur um das verschieben oder ?
Mir geht es im ersten Step eher darum das ich mehrere Umbenennungsvariablen einbauen kann und bei gleichen Treffern _1 _2 angehangen wird.

Oder kopiere ich den Teil jetzt 10mal für alle Möglichkeiten ?
137846
137846 14.01.2019 aktualisiert um 12:00:14 Uhr
Goto Top
Zitat von @novregen:

Aber bei shutil geht es doch nur um das verschieben oder ?
Mir geht es im ersten Step eher darum das ich mehrere Umbenennungsvariablen einbauen kann und bei gleichen Treffern _1 _2 angehangen wird.

Oder kopiere ich den Teil jetzt 10mal für alle Möglichkeiten ?
if elif else ist dein Freund!
https://www.programiz.com/python-programming/if-elif-else#elif-syntax

Besuche mal einen Programmiergrundkurs.
colinardo
Lösung colinardo 20.01.2019 aktualisiert um 13:39:51 Uhr
Goto Top
Zitat von @novregen:

Aber bei shutil geht es doch nur um das verschieben oder ?
Mir geht es im ersten Step eher darum das ich mehrere Umbenennungsvariablen einbauen kann und bei gleichen Treffern _1 _2 angehangen wird.

Oder kopiere ich den Teil jetzt 10mal für alle Möglichkeiten ?

Servus,
# imports 
import os
import datetime
import re
# create todays date
today = datetime.date.today().strftime("%Y-%m-%d")  
# source dir
sourceDir = "/path/to/folder"  
# extension of files
strExtension = ".pdf"  
# for each file in source directory
for file in os.listdir(sourceDir):
    # if file ends with extension
    if file.endswith(strExtension):
        # variable for new name
        strNewName = ""  
        # check for strings in filename and create new name accordingly
        if "ReA" in file:  
            strNewName = today + "_Amazon_" + file  
        elif "Telekom" in file:  
            strNewName = today + "_Telekom_" + file  
        elif "Str_" in file:  
            strNewName = today + "_RG_Hausstrom_" + file  

        # if filename should be changed
        if strNewName != "":  
            # append number with with format _[0-9]* to the end of the basename if file already exists
            cnt = 1
            while os.path.isfile(os.path.join(sourceDir,strNewName)):
                strNewName = re.sub('_\d+$','',os.path.splitext(strNewName),1) + "_" + str(cnt) + os.path.splitext(filePath)[1]  
                cnt += 1
            # sourcepath
            sourcePath = os.path.join(sourceDir,file)
            # destination path
            destPath = os.path.join(sourceDir,strNewName)
            # actually rename the file
            os.rename(sourcePath,destPath)
Wie immer ohne "Gewehr" face-wink

Grüße Uwe
novregen
novregen 22.01.2019 um 16:11:47 Uhr
Goto Top
Hallo Uwe,

vielen Dank für das Script funktioniert sehr gut. Einzig der neue Name enthält noch den vollen Text.
Bekomme ich das mit diesem script auch hin, das er nur den text hinter dem _ nimmt. Bei Splittext (Zeile 30) machst du doch diese Abfrage oder ?

Also jetzt kommt raus

ReA_Instar 9008 -> 2019-01-22_Amazon_ReA_Instar 9008

Soll

ReA_Instar 9008 -> 2019-01-22_Amazon_Instar 9008
colinardo
Lösung colinardo 22.01.2019 aktualisiert um 16:37:12 Uhr
Goto Top
Zitat von @novregen:

Hallo Uwe,

vielen Dank für das Script funktioniert sehr gut. Einzig der neue Name enthält noch den vollen Text.
Wolltest du ja laut deinem Post haben
Zitat
YYYY_MM_TT_RG_Amazon_Ursprungstext
Oder hab ich das missinterpretiert?

Wenn ja, Zeilen 18 -23 sind dein Freund, entferne das + File jeweils am Ende und mach noch ein ".PDF" dran.

Für dein letzt genanntes Beispiel, z.B.:
strNewName = today + "_Amazon_" + file.split("_",1)[1]
novregen
novregen 23.01.2019 um 13:29:52 Uhr
Goto Top
Perfekt, danke !
novregen
novregen 02.05.2019 um 11:36:30 Uhr
Goto Top
Hallo Uwe,

mit dem Srcipt werdne PDF Anhänge perfekt abgelegt und benannt.

Gäbe es eigentlich auch die Möglichkeit, dies mit den eigentlichen Email Texten auch zu machen, wenn diese eine Bestimmt Kennung in Betreff haben ? Also losgelöst von den Emails mit PDF Anhang. Die sollen so laufen wie es hier schon ist. Nur zusätzlich noch Emails ohne Anhang bei bestimmter Kennung ablegen darum ginge es mir.
Wäre das im gleichen Script lösbar ?
colinardo
colinardo 02.05.2019 aktualisiert um 13:07:17 Uhr
Goto Top
Sicher, das was du dazu brauchst habe ich hier schon mal gepostet!
Linux: Automatisiert Posteingang checken und Skript ausführen

Grüße Uwe