Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 464
» Foren-Beiträge: 641
Komplettstatistiken
|
Benutzer Online |
Momentan sind 16 Benutzer online » 0 Mitglieder » 11 Gäste AhrefsBot, Bing, DotBot, Google, bot
|
|
|
Hochkomma als Textstandard entfernen |
Geschrieben von: Joopi - 10-02-2023, 06:32 - Forum: Excel und LibreOffice Calc
- Keine Antworten
|
|
Ich hatte das Problem, dass ein Datum nicht als Datum, sondern als Text formatiert war. Mit einem führenden Hochkomma (single quote) wurde früher, aber wohl auch noch heute, gerne ein Wert in einer Zelle als Text dargestellt. Dabei scheint es sich nur um ein Formatierungszeichen zu handeln, denn bei der Länge des Wertes wird das Hochkomma nicht mitgezählt.
Der Eintrag in der Zelle wurde linksbündig geschrieben und sah wie folgt aus:
Zitat:'08.01.1989
Wenn es nur ein Tabelleneintrag ist, dann kan man schnell das Hochkomma entfernen und schon ist der Wert so zu formatieren, wie man es wünscht. Bei mehr als 400 Werten in der Tabelle würde dieses Vorgehen eine Fleißarbeit und Fingerübung darstellen.
Wie gesagt, bei der Längenberechnung wird das Hochkomma nicht mitgezählt. Die Länge-Funktion gibt als Ergebnis 10 aus. Daher war es auch nicht verwunderlich, dass mit /Bearbeiten/Suchen und Ersetzen kein Erfolg zu erzielen war. Das Hochkomma blieb hartnäckig in der Zelle.
Die Lösung war dann folgende Kombination der Funktionen Wert und Wechseln (Textdatum steht in Zelle D12):
Code: =WERT(WECHSELN(D12;"'";""))
Das Formelergebnis lautet: 32516
Und wenn die Zelle mit tt.mm.jjjj formatiert wird, dann sieht das Datum nach meinem Geschmack aus: 08.01.1989
|
|
|
Code vereinfachen, wenn eine Textdatei geöffnet wird |
Geschrieben von: Joopi - 01-02-2023, 10:16 - Forum: Programmieren
- Keine Antworten
|
|
Wie immer gibt es verschiedene Wege, um etwas zu erreichen. Das Öffnen einer Datei zum Lesen kann wie folgt programmiert werden:
Code: with open("text.txt", "r") as f:
text = f.read()
print(text)
Bei diesem Code muss nicht explizit die Datei mit einer close-Anweisung wieder geschlossen werden.
|
|
|
Darstellung der Tageszeit |
Geschrieben von: Joopi - 23-01-2023, 10:30 - Forum: Programmieren
- Keine Antworten
|
|
Nicht immer, und schon gar nicht überall, wird die Zeit wie bei uns im 24-Stunden-Modus angezeigt.
In den USA, wohl auch in Kanada, ist immer noch die 12-Stunden-Anzeige mit am und pm angesagt.
Und so ist es auch nicht verwunderlich, dass in Python oftmals die 12-Stunden-Anzeige als default-Wert steht.
Natürlich ist das zu Umgehen, indem die richtige Formatierung der Zeitausgabe angewandt wird. Oftmals ist es nur eine Kleinigkeit, die über 12- bzw. 24-Stunden-Anzeige entscheidet.
Mit dem nachfolgenden Code wird die 12-Stunden-Anzeige für 08:23:10 ausgegeben (I):
Code: zstart = datetime.datetime.fromtimestamp(startzeit).strftime("%I:%M:%S")
Mit dem nachfolgenden Code wird die 24-Stunden-Anzeige für 20:23:10 ausgegeben (H):
Code: zstart = datetime.datetime.fromtimestamp(startzeit).strftime("%H:%M:%S")
|
|
|
Bildbearbeiter wird schneller |
Geschrieben von: Joopi - 23-01-2023, 10:19 - Forum: Programmieren
- Keine Antworten
|
|
Mit einem Shellskript bearbeite ich Bilder, die in diversen Ordner organisiert sind. Die Bilder werden geprüft, ggf. in jpg-Format konvertiert und auf eine maximale Seitenlänge von 1.024 Pixel verkleinert.
Das Shellskript habe ich nun in einem Pythonskript nachgebaut. Es sind die gleichen Funktionen enthalten.
Zunächst hatte ich den Gedanken, dass das Shellskript wesentlich schneller sein würde als das Pythonskript. Ein Test hat aber gezeigt, dass dem nicht so ist. Und das hat mich schon verwundert. Zumal das Pythonskript noch verbesserungswürdig ist.
Natürlich hat der Test und das Testresultat keine wissenschaftliche Grundlage, aber interessant finde ich es trotzdem. Hier sind die Ergebnisse:
Shellskript:
Zitat:Das ist die gemessene Zeit in Sekunden: 458
Das ist die gemessene Zeit in Minuten: 7.63 --> 00:07:38
Das ist die gemessene Zeit in Stunden: .12
Pythonskript:
Zitat:Das war die Startzeit: 18:07:26
Das war die Endzeit : 18:14:05
Das ist die Dauer : 00:06:39
|
|
|
Große Zahlen für Menschen lesbar darstellen |
Geschrieben von: Joopi - 23-01-2023, 07:20 - Forum: Programmieren
- Keine Antworten
|
|
Dann und wann sind Zahlen so groß, dass diese kaum auf den ersten Blick lesbar sind.
Es gibt aber die Möglichkeit, in der Konsole wie auch in einem Pythonskript, solche Zahlen, die meist eine Größe darstellen, für Menschen besser lesbar zu machen.
Der nachfolgende Codeschnipsel zeigt es:
Code: from humanize import naturalsize
import os
file_size = os.path.getsize(bilddatei)
print(f"Ich bin so groß: {naturalsize(file_size)}")
|
|
|
Bilder auf eine maximale Seitenbreite/-höhe verkleinern |
Geschrieben von: Joopi - 23-01-2023, 06:00 - Forum: Programmieren
- Keine Antworten
|
|
Viele Bilder, die ich in meiner Sammlung habe, brauche ich nicht in der Originalgröße mehreren MegaBytes. Daher reduziere ich alle diese Bilder auf eine maximale Breite oder maximale Höhe von 1.024 Pixel.
In der Konsole erledige ich diese Aufgabe mit dem Tool ffprobe und muss mich mehr oder weniger um nichts kümmern. In Python sieht auch das anders aus.
Der folgende Codeschnipsel, der noch stark verbesserungswürdig ist, erledigt diese Aufgabe.
Code: import os
import pathlib
from PIL import Image
import PIL
for bildordner in pathlib.Path(rename_ordner).iterdir():
if bildordner.is_dir():
os.chdir(bildordner)
for bilddatei in pathlib.Path(os.getcwd()).iterdir():
if bilddatei.is_file():
imgfile = Image.open(rf"{bilddatei}")
# Breite x Höhe.
# Ausgabe in Tuple.
# Der Maximalwert ist 1024 Pixel für Breite oder Höhe - je nach dem.
width, height = imgfile.size
if width > 1024 or height > 1024:
# Berechnung auf Grundlage des Maximalwertes von 1024
if width >= height:
verhaeltnis = height * 100 / width
widthnew = 1024
heightnew = verhaeltnis * widthnew / 100
newsize = (int(widthnew), int(heightnew))
imgfile = imgfile.resize(newsize)
imgfile = imgfile.save(bilddatei)
elif height > width:
verhaeltnis = width * 100 / height
heightnew = 1024
widthnew = verhaeltnis * heightnew / 100
newsize = (int(widthnew), int(heightnew))
imgfile = imgfile.resize(newsize)
imgfile = imgfile.save(bilddatei)
os.chdir("..")
|
|
|
Andere Bildformate nach jpg konvertieren |
Geschrieben von: Joopi - 23-01-2023, 04:43 - Forum: Programmieren
- Keine Antworten
|
|
Grundsätzlich arbeite ich mit Bildern im jpeg-Format. Das betrifft war nicht die raw-Dateien aus der Fotografie, aber eben alle anderen Bilder. Sollte mir andere Bildformate vorliegen, so konvertiere ich diese in jpeg-Format.
Mit dem Tool convert in der Konsole ist das relativ einfach. In Python aber nicht. Hier muss bedacht werden, dass eine echte Konvertiertung nicht stattfindet, sondern ein neues Abspeichern. Dabei treten Probleme auf, die es unter convert so nicht gibt.
So ist z.B. zu beachten, dass png-Bilder einen transparenten Hintergrund haben können, jpeg-Bilder allerdings nicht. Daher ist der Alphakanal eines png-Bildes zu löschen. Das geht mit der Konvertierung von RGBA nach RGB. Ansonsten würde sich ein Bilder neu unter dem jpeg-Format nicht speichern lassen, wenn es in einem Pythonskript erfolgen soll.
Folgender Codeschnipsel läuft im Moment bei mir reibungslos (die Ursprungsdatei wird gelöscht!).
Code: import os
import pathlib
from PIL import Image
for bildordner in pathlib.Path(rename_ordner).iterdir():
if bildordner.is_dir():
os.chdir(bildordner)
for bilddatei in pathlib.Path(os.getcwd()).iterdir():
if bilddatei.is_file():
filename, file_extension = os.path.splitext(bilddatei)
ext = file_extension
if ext != ".jpg":
# print(bilddatei)
# print(ext)
# print(filename)
imgfile = Image.open(rf"{bilddatei}")
imgfile = imgfile.convert("RGB")
imgfile.save(rf"{filename}{extneu}")
os.remove(bilddatei)
os.chdir("..")
|
|
|
Korrupte Bilddateien erkennen und löschen |
Geschrieben von: Joopi - 23-01-2023, 04:01 - Forum: Programmieren
- Keine Antworten
|
|
Ich durchforste immer wieder meine Bilder (Fotos), ob ggfs. korrupte Dateien dabei sind. Wenn diese Dateien schon kaputt sind, bemühe ich mich auch nicht mehr, diese zu prüfen und ggfs. aufwendig zu reparieren. Mit dem folgenden Codeschnipsel werden solche Dateien erkannt und gelöscht.
Code: import os
import pathlib
from PIL import Image
for bildordner in pathlib.Path(rename_ordner).iterdir():
if bildordner.is_dir():
os.chdir(bildordner)
for bilddatei in pathlib.Path(os.getcwd()).iterdir():
if bilddatei.is_file():
try:
imgfile = Image.open(bilddatei)
imgfile.verify()
except (IOError, SyntaxError) as e:
print(bilddatei)
os.remove(bilddatei)
os.chdir("..")
|
|
|
Unerwünschte Endung in Ordnernamen entfernen |
Geschrieben von: Joopi - 22-01-2023, 08:56 - Forum: Programmieren
- Keine Antworten
|
|
Dann und wann schleichen sich bei der Arbeit mit vielen Bildern in vielen Ordner leider Ordernamen ein, die nicht erwünscht sind. Diese sollen entfernt werden. Die unerwünschten Endungen stehen dabei in einer Liste, die dann je Ordner abzuarbeiten ist.
Code: trash_endung = [".jpg", "_001.jpg", "_002.jpg", "(1).jpg", "(1).jpeg", "_1_.jpg", "_2_.jpg", "_1.jpg", ".jpeg", "yenc", "yEnc", ".par2", ".zip", ".rar"]
for bildordner in pathlib.Path(rename_ordner).iterdir():
if bildordner.is_dir():
basename = os.path.basename(bildordner)
for endung in trash_endung:
basename = basename.replace(endung, "")
Eine andere Möglichkeit wäre, die str.endswith() Methode zu verwenden, um zu überprüfen, ob der Name des Ordners mit einer unerwünschten Endung endet, und dann die entsprechende Endung zu entfernen.
Code: trash_endung = [".jpg", "_001.jpg", "_002.jpg", "(1).jpg", "(1).jpeg", "_1_.jpg", "_2_.jpg", "_1.jpg", ".jpeg", "yenc", "yEnc", ".par2", ".zip", ".rar"]
for bildordner in pathlib.Path(rename_ordner).iterdir():
if bildordner.is_dir():
basename = os.path.basename(bildordner)
for endung in trash_endung:
print(endung)
if basename.endswith(endung):
basename1 = basename[:-len(endung)]
os.rename(f"{rename_ordner}/{basename}", f"{rename_ordner}/{basename1}")
break
|
|
|
Die Bestandteile von Ordner und Datei |
Geschrieben von: Joopi - 22-01-2023, 07:49 - Forum: Programmieren
- Keine Antworten
|
|
Dann und wann ist es wichtig, dass nur der Dateiname oder nur die Extension einer Datei zur Verfügung steht. Dazu dienen folgende Codezeilen:
Code: filename = os.path.splitext("/media/user/index.html")
Ausgabe:
Zitat:Das ist filename: /media/user/index
Code: file_extension = os.path.splitext("/media/user/index.html")
Ausgabe:
Zitat:Das ist file_extension: .html
Code: basename = os.path.basename("/media/user/index.html")
Ausgabe:
Zitat:Das ist basename: index.html
|
|
|
|