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-Key: 397620

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

Printed on: April 25, 2024 at 17:04 o'clock

Mitglied: 137846
137846 Jan 09, 2019 updated at 20:19:42 (UTC)
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.
Member: Pjordorf
Pjordorf Jan 09, 2019 updated at 16:48:34 (UTC)
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
Member: novregen
novregen Jan 14, 2019 at 10:32:26 (UTC)
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 ?
Mitglied: 137846
137846 Jan 14, 2019 updated at 11:00:14 (UTC)
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.
Member: colinardo
Solution colinardo Jan 20, 2019 updated at 12:39:51 (UTC)
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
Member: novregen
novregen Jan 22, 2019 at 15:11:47 (UTC)
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
Member: colinardo
Solution colinardo Jan 22, 2019 updated at 15:37:12 (UTC)
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]
Member: novregen
novregen Jan 23, 2019 at 12:29:52 (UTC)
Goto Top
Perfekt, danke !
Member: novregen
novregen May 02, 2019 at 09:36:30 (UTC)
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 ?
Member: colinardo
colinardo May 02, 2019 updated at 11:07:17 (UTC)
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