Hi
ich bin neu hier und habe nicht die geringste Ahnung vom Programmieren...
Ich arbeite mit MacOS und bei meiner Suche nach einer Lösung für mein Problem hat man mir dieses Forum empfohlen.
Hier meine hoffnungslose Situation.
Momentan bezeichne ich manuell tausende txt-Dateien um.
Das zu automatisieren wäre ein Traum.
Alle diese txt-Dateien sind momentan nur mit Artikelnummern bezeichnet. Alle Dateien haben den Inhalt betreffend die gleiche Listenstruktur und Formatierung mit natürlich unterschiedlichen Angaben. zB.
Farbe...blau
Gewicht...53
Material...Kupfer
Jahr...1964
Code...en
usw. sowie eine Menge mehr Informationen
Ich möchte nun in den jeweiligen txt-Dateien (eigentlich allen) nach mehreren Kriterien suchen, deren Ergebnis herausführen und im Idealfall der txt Datei in deren Bezeichnung anfügen. Momentan mache ich das halt manuell.
Das würde beispielsweise bedeuten ich suche in der txt-Datei gleichzeitig nach den Stichworten Farbe, Jahr, Code und das Ergebnis wird dann automatisch/halbautomatisch der txt-Datei-Bezeichnung angefügt
zB.
vorher: 237492715.txt
nachher: 237492715 (blau 1964 en).txt
Ich gebe zu, sehr speziell, aber es war zumindest mal eine Abwechslung mal diesen Text als Frage einzustellen als die stupide manuelle Änderung der Dateien.
Schön wäre eine Art Programm das ich auch als blutiger Laie individuell anpassen kann.
Gibt es hier jemanden der mir irgendwie Hoffnung machen könnte?
Textinhalt suchen und damit txt-Datei umbenennen?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ist die Syntax immer exakt so? Also
dienen die drei Punkte als Trenner? Gibt es noch Kommentarzeilen usw?
Code: Alles auswählen
Schlüssel...Wert
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Das lässt sich relativ einfach lösen. Lese alle Dateien ein. Oder noch einfacher, übergib sie einfach per Shell an Python, dann stehen alle Namen in sys.argv. Danach öffnest du sie der Reihe nach, suchst nach den passenden Informationen, z.B. mit regulären Ausdrücken, dann baust du den neuen Dateinamen und benennst die Datei um nachdem du sie wieder geschlossen hast.Snej hat geschrieben:Gibt es hier jemanden der mir irgendwie Hoffnung machen könnte?
Ungetestet:
Code: Alles auswählen
import os, re, sys
# für alle Argumente...
# (sys.argv[0] enthält den Dateinamen des Script, daher weglassen)
for name in sys.argv[1:]:
# einfach alles einlesen
with open(name) as f:
text = r.read()
# jetzt die Wörter suchen
m = re.search(r"^Farbe\.\.\.(\w+)", text, re.M)
if m:
color = m.group(1)
...
# Annahme: name endet auf .txt.
new_name = "%s (%s %s %s).txt" % (name[:-4], color, year, code)
# umbenennen
os.rename(name, new_name)Auf der Lösung von sma aufbauend, ebenfalls ungetestet, ohne regexp (und evtl. leichter für Newbies anzupassen):
Code: Alles auswählen
import os, os.path, sys
for path in sys.argv[1:]:
with open(path) as f:
properties = dict(l.split("...") for l in f)
root, ext = os.path.splitext(path)
new_path = "{} ({Farbe} {Jahr} {Code}){}".format(root, ext, **properties)
os.rename(path, new_path)Oh, das ist ja viel schöner. Aber du brauchst nicht `os.path` explizit zu importieren. Und wäre es nicht sicherer, `{0}` und `{1}` statt {} zu benutzen? Root würde ich noch base nennen und dann ist's perfekt 
Stefan
Stefan
Ich stimme zu, außer dem letzten Satz, weil "root" in der Doku steht.sma hat geschrieben:Oh, das ist ja viel schöner. Aber du brauchst nicht `os.path` explizit zu importieren. Und wäre es nicht sicherer, `{0}` und `{1}` statt {} zu benutzen? Root würde ich noch base nennen und dann ist's perfekt
Stefan
-
BlackJack
@bords0: Bei `split()` würde ich noch angeben, dass maximal einmal gesplittet werden soll, dann bekommt man keine Probleme mit Zeilen, in denen eventuell mehrere Trenner vorkommen.
Hallo
da bin ich wieder.
Ich bin positiv überrascht das mein Anliegen lösbar ist und danke schon mal sehr für die Hilfe.
Das Wochenende kommt gerade recht um mich mit Python auseinanderzusetzen.
Um mein Beispiel noch etwas zu präzisieren.
Über 90% aller txt Dateien haben die gleiche Listenstruktur.
Bei manchen Inhalten ist die Reihenfolge vertauscht oder es ist eine Leerzeile dazwischen.
Auch tauchen in der Liste ein Eintrag 2x an unterschiedlicher Stelle auf.
(Meine Erstellung dieser txt Dateien hat sich auch über die Jahre entwickelt was die leichten Unterschiede erklärt)
Wird bei der Suche nach Worten gesucht, oder nach der Zeile in der sich die Worte befinden?
Kann ich ein Wort suchen und dafür eine Abkürzung oder eine vordefinierte Zeichenfolge als Ausgabe einstellen?
Aber wie gesagt, das Wochenende ist jetzt verplant um mich damit auseinanderzusetzen.
da bin ich wieder.
Ich bin positiv überrascht das mein Anliegen lösbar ist und danke schon mal sehr für die Hilfe.
Das Wochenende kommt gerade recht um mich mit Python auseinanderzusetzen.
Um mein Beispiel noch etwas zu präzisieren.
Über 90% aller txt Dateien haben die gleiche Listenstruktur.
Bei manchen Inhalten ist die Reihenfolge vertauscht oder es ist eine Leerzeile dazwischen.
Auch tauchen in der Liste ein Eintrag 2x an unterschiedlicher Stelle auf.
(Meine Erstellung dieser txt Dateien hat sich auch über die Jahre entwickelt was die leichten Unterschiede erklärt)
Wird bei der Suche nach Worten gesucht, oder nach der Zeile in der sich die Worte befinden?
Kann ich ein Wort suchen und dafür eine Abkürzung oder eine vordefinierte Zeichenfolge als Ausgabe einstellen?
Aber wie gesagt, das Wochenende ist jetzt verplant um mich damit auseinanderzusetzen.
