Das funktioniert wunderbar.
Ich benötige aber noch eine Wildcard, so das der Code auf alle .jpg Bilder mit der Umbenennung greift (praktisch muss es unabhängig von dem sein, was vor dem .jpg steht).
Leider habe ich davon keine Ahnung.
Danke für eure Antworten.
Ich habe es jetzt so versucht. Die Konsole bringt mir aber den Fehler:
os.rename(path + '.jpg', newname)
TypeError: can only concatenate list (not "str") to list
@freund: Anscheinend hast Du ja auch erkannt das es sich bei `path` um eine Liste handelt. Was denkst Du denn was da drin ist und was es bringen soll an eine Liste eine Zeichenkette zu addieren?
import datetime
import os
import glob
dt = str(datetime.datetime.now)
for filename in glob.glob('*.txt'):
os.rename(filename, dt + '.txt')
Läuft ohne Fehler durch.
Wenn ich mir die Liste der Dateien anzeigen lasse sehe ich die Dateinamen jetzt mit: <built-in method now of type object at 0x964800>.txt
Was kann das sein?
Danke für eure Hinweise
Edit:
() nach now hat gefehlt.
Problem jetzt: alle Dateien werden mir überschrieben wie es aussieht.
Mit:
Die `datetime.datetime` Objekte haben uebrigens noch eine `strftime` Methode mit der du einfach die Zeit formatieren kannst, inklusive der Dateiendung und eventueller Praefixe.
@freund: Du erzeugst *einmal* eine Zeichenkette mit der aktuellen Zeit und erwartest dann das das die sich auf magische Weise aktualisiert wenn Du sie irgendwo benutzt‽
Das von BlackJack war eine hilfreiche Antwort.
Du erzeugst aus einer Zeit eine Zeichenkette. Wenn ich jetzt auf einen Zettel 16:55 schreibe, dann wird dort an der Stelle auch in 10 Minuten noch 16:55 stehen und nicht 17:05.
@freund: Nun das ist dann eine falsche Erwartung. Eine Zeichenkette ist eine Folge von Zeichen. Die hat keine Ahnung wie sie mal zustande gekommen ist und ändert sich nicht auf magische Weise so wie man sich das wünscht. Programmiersprachen machen das was man sagt, nicht das was man meint.
@freund: Ähm, ja die *eine* sich *nicht ändernde* Zeichenkette wird als Grundlage für alle Quelldateien genommen, das heisst alle Quelldateien werden zu diesem einen Dateinamen umbenannt, was halt dazu führt das am Ende nur noch ein Dateiname existiert und darüber die letzte umbenannte Datei erreichbar ist. ``dt + '.txt'`` ergibt immer die gleiche Zeichenkette denn der Wert von `dt` ändert sich nicht auf magische Weise.
@freund: Was meinst Du mit Zeit + 1? Was ist denn das *eigentliche* Ziel von dieser Aktion? Macht das denn überhaupt Sinn den Dateien auf diese Weite einen zeitbasierten Namen zu geben? Ist Dir klar das die Reihenfolge der Namen wie sie von `glob` geliefert werden nahezu beliebig sein kann‽
Edit: Im ersten Beitrag sieht es noch so aus als sollte der alte Dateiname erhalten bleiben und nur die aktuelle Zeit eingefügt werden. *Dann* käme man ja auch prima mit *einer* Zeitangabe für alle Dateinamen aus.
Edit2: In dem Fall hilft `os.path.splitext()` sehr wahrscheinlich weiter. Und bitte Zeichenkettenformatierung mit der `format()`-Methode statt `str()` und ``+``. Letzteres ist eher BASIC als Python.
Edit3: Und `os.path.join()` statt ``+`` für Pfadteile.
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import os
from datetime import datetime as DateTime
from glob import iglob
def main():
path = '/home/pi'
now = DateTime.now()
for filename in iglob(os.path.join(path, '*.jpg')):
name, extension = os.path.splitext(filename)
os.rename(
filename, '{0}_{1:%Y-%m-%d_%H%M%S}{2}'.format(name, now, extension)
)
if __name__ == '__main__':
main()
Wenn man so etwas entwickelt, gerade wenn man die Sprache und die Datentypen und Operationen noch nicht so gut, ist es immer hilfreich wenn man damit ein wenig in einer Python-Shell herumexperimentiert um zu sehen wie die Zwischenergebnisse aussehen.
In [11]: from datetime import datetime as DateTime
In [12]: import os
In [13]: filename = 'some/path/image.jpg'
In [14]: name, extension = os.path.splitext(filename)
In [15]: name
Out[15]: 'some/path/image'
In [16]: extension
Out[16]: '.jpg'
In [17]: now = DateTime.now()
In [18]: '{0}_{1:%Y-%m-%d_%H%M%S}{2}'.format(name, now, extension)
Out[18]: 'some/path/image_2015-08-27_094727.jpg'