Image Datei lesen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

@Melewo
danke aber es geht nicht um die Icons. Die habe ich alle wunderschöne Icons und ich kann sie auch öffnen und auf dem Display anzeigen lassen.

Es geht nur darum das ich eine Datei öffnen möchte des Namen aus einer Variablen kommt.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Also die Icons hast Du alle bereits?
Wie viele sind es denn?
Wenn eine überschaubare Anzahl, dann würde ich einen Dictionary benutzen, doch wenn es zu viele werden (las etwas von über 4.000 zum Download) würde ich SQLite nehmen.

In einem Dictionary:
{"Das Erste HD": "das-erste-hd.png", ...}

Oder SQLite:
Sendernamen | Icons
Das Erste HD | das-erste-hd.png

Und dann ist das ein schneller Vergleich und das zugeordnete Icon wird geladen.
BlackJack

@Melewo: Dir ist schon klar das diese ganzen Vorschläge hier *nichts* bringen werden‽ ;-)
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Na ja, ich ging ja davon aus, dass die Icons von den Sendern übermittelt werden, bis ich in dem anderen Forum etwas davon las, dass man sich die als Zip-Archiv selbst von einem Portal herunterladen kann und bereits als Thumbs verkleinert abgelegt, nur noch dem jeweiligen Sender zuordnen und anzuzeigen braucht.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Verstehe ich jetzt so, dass es sich um eine halbwegs aktuelle Sammlung mit 4.435 Senderlogos handelt, von denen aber nur die ersten 1.000 in der Liste angezeigt werden.

Und unter diesen Mischmasch von Groß- und Kleinschreibung und mit Leerzeichen dazwischen, würde ich die halt nicht abspeichern.
Sorry, we had to truncate this directory to 1,000 files. 3,435 entries were omitted from the list.
https://github.com/3PO/Senderlogos
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

@Melewo
Um Himmels willen ..... ne ne sind nur ca 120 Icons. Ist nur normales Kabel Fernsehen. Logos werden da ja leider nicht übermittelt.
Ich habe ein Ordner mit Icons. Die sind Grundsätzlich also nicht das Problem.

@BlackJack.
Wie wäre mal mit einer Antwort anstelle eines dummen Kommentars. Ich gehe davon aus das Du als Python Profi weder die Frage verstanden hast noch eine Lösung des Problem haben wirst.
BlackJack

@Melewo: Die Dateinamen entsprechen den Sendernamen welche die Sender selbst in den Metadaten mitschicken. Das heisst man muss nur den Sendernamen ermitteln und hat damit gleich den Dateinamen für's Logo. Warum sollte man da jetzt anfangen die umzubenennen und eine extra Datei anzulegen die Sendernamen auf Dateinamen abbildet? Das macht nur unnötig Arbeit.

@tjost: Netter Versuch. ;-)
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

@BlackJack beweise mir das Gegenteil.

Die Daten der Logos kommen von TVHeadend und sehen ungefähr so aus. "1987c9198dchzbbocq87ezrocb2937z.png" Kodi bekommt die Daten von TVHeadend und aus Kodi kann ich dann nur den Namen auslesen.

Bild

Hier mal ein Vergleich wie das Display aussieht und wie groß es ist.

Bild

Dieses Logo einfach zu übernehmen macht wenig Sinn weil man es dann nicht mehr erkennen könnte.

Darum möchte ich den Weg gehen den Sendernamen auszulesen und den erhaltenen Wert dann an ein .png anfügen um es zu laden.

Melowe gibt sich immerhin Mühe mein Problem zu verstehen. Er hat spaß daran was neues zu lernen. Vor einem Problem zu stehen was er noch nicht hatte und daraus etwas neues zu lernen. Das rechne ich im Hoch an. Du hingegen blockst nur, stellst mich als Trottel da und hilfst nicht einen millimeter weiter.
Hast Du mal darüber nachgedacht das viel hier reinklicken, sehen das ein Moderator im ersten Post nur negative schreibt und sich dann sofort nicht weiter beteiligen? Das soll nicht die Funktion eines Moderators sein. Also entweder hilfst Du jetzt oder Du lässt Melowe und mich das Problem lösen.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

@BlackJack: Weil beim Bilderupload eine häufige Fehlerquelle war, wenn die Images mit Namen hochgeladen wurden, wie sie auf einem Windowsrechner lagen. Nicht bei mir, doch häufig bei WP-Nutzern, die den Unterschied zwischen Windows und Linux-Verwandten nicht kannten und dann nichts wegen irgendwelcher Sonderzeichen oder Unterschieden bei der Groß- und Kleinschreibung geladen wurde. Und es sind ja in der Liste von 3PO/Senderlogos auch nicht wenige, die ein Fragezeichen an Stelle von Umlauten oder Sonderzeichen enthalten.

@tjost: Gut, ich habe ein einfaches Beispiel nun erst einmal so fertig gemacht. Ob Du an Stelle der Sendernamen nun irgendwelche anderen Kennungen wie "1987c9198dchzbbocq87ezrocb2937z" benutzen musst, müsstest Du Dir selbst ausprobieren. Auch weiß ich augenblicklich nicht, wie das mit einer Aktualisierung geregelt werden könnte.

Code: Alles auswählen

import os

senderlogos = {
    "Das Erste": "das-erste.png",
    "Das Erste HD": "das-erste-hd.png",
    "Live-TV": "live-tv.png",
    }

sender = xbmc.getInfoLabel("VideoPlayer.ChannelName")

if sender in senderlogos:
    logo = senderlogos[sender]
else:
    logo = "ersatzbild.png"
    
pfad = "name_deines_icon_verzeichnisses"
image = Image.open(os.path.join(pfad, logo))
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

@Melewo Danke das os.join hatte ich nicht gefunden nun geht es.

Code: Alles auswählen

import time

import xbmcaddon
import xbmcgui
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
import os
import sys

addon		= xbmcaddon.Addon()

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont


    
import subprocess
# Raspberry Pi pin configuration:
RST = 24
# Note the following are only used with SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0

# Beaglebone Black pin configuration:
# RST = 'P9_12'
# Note the following are only used with SPI:
# DC = 'P9_15'
# SPI_PORT = 1
# SPI_DEVICE = 0

# 128x32 display with hardware I2C:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)

# 128x64 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

# 128x32 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# 128x64 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# Raspberry Pi pin configuration:
RST = 24
# Note the following are only used with SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0

# Beaglebone Black pin configuration:
# RST = 'P9_12'
# Note the following are only used with SPI:
# DC = 'P9_15'
# SPI_PORT = 1
# SPI_DEVICE = 0

# 128x32 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)

# 128x64 display with hardware I2C:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

# 128x32 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# 128x64 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# Initialize library.
disp.begin()

# Clear display.
disp.clear()
disp.display()

# big thanks to Melewo from the Python-Forum.de for helping me get on track.

while True:
	
	thumb = xbmc.getInfoLabel("VideoPlayer.ChannelName")

	suffix = '.png'
	dir_name = "/home/osmc/icon/"
	display = os.path.join(dir_name, thumb + suffix)

	image = Image.open(display).resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

# Display image.
	disp.image(image)
	disp.display()
Das mal der Code und hier ein Video wie es aussieht:

https://youtu.be/AtDwLQliCEU

Das war das was ich brauchte. Nun kann ich daran weiter arbeiten und es verfeinern.
Ich kann Dir gar nicht sagen wie sehr ich mich über Deine Hilfe freue und wie Dankbar ich bin.
Falls Du dich fragst was das Logitech soll, ich habe den Pi in einen alten Centerlautsprecher aus meiner Logitech Anlage gebaut. Sieht einfach schöner aus so.
Zuletzt geändert von Anonymous am Montag 26. Juni 2017, 16:48, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@tjost: Inhaltlich helfen ist genau genommen nicht die Aufgabe eines Moderators. Das kann er machen, muss er aber nicht. Ich habe auch geholfen, nur das meine Hilfe nicht angenommen wurde.

Um das „Sky Cinema“ herunter zu skalieren und in eine Bitmap umzuwandeln ist `PIL` nicht wirklich gut geeignet. Insbesondere der letzte Schritt haut qualitativ nicht wirklich hin, denn `PIL` kennt zum dithern nur den Floyd-Steinberg-Algorithmus oder einen einfachen Schwellenwert.

Floyd-Steinberg:
Bild
Schwellenwert:
Bild

Ein bisschen besser bekommt man es zum Beispiel mit ImageMagick's ``convert`` und einem „ordered dither“ hin, aber bei der Grösse müsste man für gute Bilder wahrscheinlich manuell Pixeln.

``convert`` mit „2×2 ordered dither“:
Bild

Wenn die Bilder nicht live von irgendwo her geholt werden, kann man die ja auch *einmal* mit einem geeigneten Werkzeug umwandeln und im Dateisystem hinterlegen.

Deine Lösung beschäftigt jetzt einen Prozessorkern zu 100% damit ständig ein Bild zu laden, zu verkleinern, in eine Bitmap umzuwandeln, und dann an das Display zu senden. Und der überwiegenden Zahl der Fälle ist das immer das gleiche Bild. Ich nehme mal an das Du keinen Raspi mit *einem* Prozessorkern hast, sonst wäre das wahrscheinlich schon unangenehm aufgefallen. :-)

@Melewo: Ich vermute mal ganz stark die Dateinamen sind genau so gewählt wie sie als Bytes aus den DVB-Daten kommen ohne das man herausfinden müsste wie sie kodiert sind, damit sie direkt verwendet werden können. Unter Linux zumindest. Aber da das auf dem Raspi läuft, wäre das ja kein Problem. Notfalls könnte man die paar Namen die nicht UTF-8 kodiert sind, auch einfach umbenennen. Das nachfolgende Java-Programm sagt es sind 1,22 Prozent. Ob man das jetzt als viel oder wenig ansieht… Man kann die auf jeden Fall dann auch automatisiert umbenennen (leider nicht mit Java).

[codebox=java5 file=Unbenannt.java]import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public final class Main {

private Main() {}

public static void main(String... args) throws IOException {
final Path logosPath = Paths.get(
System.getProperty("user.home"), "src/Senderlogos");

final Collection<String> fileNames;
try (Stream<Path> pathStream = Files.list(logosPath)) {
fileNames = pathStream
.map(path -> path.getFileName().toString())
.sorted()
.collect(Collectors.toList());
}

final long notDecodableCount = fileNames.stream()
.filter(name -> name.contains("�"))
.peek(System.out::println)
.count();

System.out.printf(
"%d = %.2f%% der Dateinamen konnten nicht dekodiert werden.\n",
notDecodableCount,
100.0 * notDecodableCount / fileNames.size());
}
}[/code]
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

@BlackJack
@tjost: Inhaltlich helfen ist genau genommen nicht die Aufgabe eines Moderators. Das kann er machen, muss er aber nicht. Ich habe auch geholfen, nur das meine Hilfe nicht angenommen wurde.
Ich denke mal da können wir aufhören zu Diskutieren. Dein Verständnis ist ein anderes wie meines. Denn trotz allem hast Du immer noch nichts von dem verstanden was ich gemacht habe. Du hast nur mit jedem Beispiel was Du gibst auf Krampf versucht meinen Ansatz als Falsch darzustellen. Das ist keine Hilfe. Hättest Du helfen wollen hättest Du mir den Hinweis "os.join.…" gesagt denn danach habe ich von Anfang an gesucht. Aber da Du das ja nicht verstanden oder verstehen wollen. Und das ist Offensichtlich.
Um das „Sky Cinema“ herunter zu skalieren und in eine Bitmap umzuwandeln ist `PIL` nicht wirklich gut geeignet. Insbesondere der letzte Schritt haut qualitativ nicht wirklich hin, denn `PIL` kennt zum dithern nur den Floyd-Steinberg-Algorithmus oder einen einfachen Schwellenwert.

Floyd-Steinberg:
Bild
Schwellenwert:
Bild

Ein bisschen besser bekommt man es zum Beispiel mit ImageMagick's ``convert`` und einem „ordered dither“ hin, aber bei der Grösse müsste man für gute Bilder wahrscheinlich manuell Pixeln.

``convert`` mit „2×2 ordered dither“:
Bild
Ich habe mehrfach geschrieben das ich die Icons selbst erstelle:
Bild

Sie sind Monochrom in 8 Bit Graustufen.

Meine CPU Last liegt im Schnitt bei 15% ich habe noch keinerlei Fehler bemerkt. So wie das sehe wird das Bild einmal Skaliert und dann auf dem Display ausgegeben. Erst wenn sich der Wert ändert wird das Display aktualisiert. Mache ich gerade nichts mit Raspi liegt die Auslastung bei 3%

Ja ich nehme die Namen die von TV Server kommen. Dort kann ich Namen auch ändern was ich bei Comedy Central/Viva machen musste weil ich keine Datei mit / im Namen abspeichern konnte. Ansonsten läuft das Super bis jetzt.
BlackJack

@tjost: Du hast nicht von Anfang an nach `os.path.join()` gesucht, Du hast Syntax falsch gehabt. Da hätte Dir keine Funktion bei geholfen wenn Du *grundsätzliche* Probleme hast Aufrufe syntaktisch korrekt zu schreiben. Denn `os.path.join()` muss man auch aufrufen und auch syntaktisch korrekt. `os.path.join()` habe ich da schon im Kopf gehabt, allerdings war das zu dem Zeitpunkt gar nicht nötig, denn da hast Du noch etwas anderes von Kodi abgefragt, was laut Dokumentation bereits ein kompletter Pfad war. Dafür hättest Du die Funktion also gar nicht gebraucht.

Du hast nur geschrieben das Du Icons hast, nicht in welchem Format die vorliegen. Und da Du Code schreibst der die Bilder nach dem laden verkleinert und in Bitmaps umwandelt, kann man als denkender Mensch ja nur schlussfolgern, dass Du das machst weil die nicht in der passenden Grösse und Farbtiefe vorliegen. Und da stellt sich jetzt immer noch die Frage warum nicht, denn wenn man sie selber macht, dann kann man auch für eine möglichst gute Qualität im Zielformat sorgen ohne das man sie im laufenden Programm noch umwandeln muss.

Bei dem Code denn Du gezeigt hast läuft eine Endlosschleife die ständig den Sendernamen abfragt, das Bild verarbeitet, und zum Display schickt. Da wird nirgends berücksichtigt ob sich der Sender geändert hat oder nicht. Was die CPU-Last angeht ”rettet” Dich wahrscheinlich das Senden ans Display weil die serielle Übertragung verhältnissmässig langsam ist und entsprechend blockiert und damit die CPU für anderes frei lässt.
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

@tjost: Du hast nicht von Anfang an nach `os.path.join()` gesucht, Du hast Syntax falsch gehabt. Da hätte Dir keine Funktion bei geholfen wenn Du *grundsätzliche* Probleme hast Aufrufe syntaktisch korrekt zu schreiben. Denn `os.path.join()` muss man auch aufrufen und auch syntaktisch korrekt. `os.path.join()` habe ich da schon im Kopf gehabt, allerdings war das zu dem Zeitpunkt gar nicht nötig, denn da hast Du noch etwas anderes von Kodi abgefragt, was laut Dokumentation bereits ein kompletter Pfad war. Dafür hättest Du die Funktion also gar nicht gebraucht.
Syntaktisch ist Dein Lieblingswort, oder? Nur weil ich die Funktion nicht kenne oder den Namen nicht kenne habe ich den Code Schnipsel als Beispiel gebracht damit man versteht was ich will. Ich habe keinen Code geschrieben den ich so auch nutzen wollte. Da hätte man mal nachfragen können.
Du hast nur geschrieben das Du Icons hast, nicht in welchem Format die vorliegen. Und da Du Code schreibst der die Bilder nach dem laden verkleinert und in Bitmaps umwandelt, kann man als denkender Mensch ja nur schlussfolgern, dass Du das machst weil die nicht in der passenden Grösse und Farbtiefe vorliegen. Und da stellt sich jetzt immer noch die Frage warum nicht, denn wenn man sie selber macht, dann kann man auch für eine möglichst gute Qualität im Zielformat sorgen ohne das man sie im laufenden Programm noch umwandeln muss.
Das war alles nicht der Kern der Frage. Da Du darauf immer noch rumreitest hast Du es immer noch nicht verstanden. Und Nachgefragt hast Du auch nicht. Du bist von Deinem Wissensstand ausgegangen und besitzt immer noch nicht die Größe das einzugestehen.
Bei dem Code denn Du gezeigt hast läuft eine Endlosschleife die ständig den Sendernamen abfragt, das Bild verarbeitet, und zum Display schickt. Da wird nirgends berücksichtigt ob sich der Sender geändert hat oder nicht. Was die CPU-Last angeht ”rettet” Dich wahrscheinlich das Senden ans Display weil die serielle Übertragung verhältnissmässig langsam ist und entsprechend blockiert und damit die CPU für anderes frei lässt.
Richtig eine Endlosschleife und genau das soll sie auch. Das nutzt aber so gut wie keine Ressourcen weil es als Script in Kodi läuft. Ich kann auslesen das die Bitmap nur einmal an das Display gesendet wird erst wenn sich der Wert ändert wird ein neues Display geladen.

Letztenendes hat es keinen Zweck mit Dir darüber zu reden da Du deine Fehler nicht eingestehen willst und lieber weiter nach vermeintlichen Fehlern sucht wo kein sind. Also. Dank Melewo der mir letztendlich den Weg gezeigt hat habe ich etwas was so funktioniert wie ich es mir wünsche. Mehr wollte ich nicht. Ich kann nichts dafür das Du weder die Frage verstehst noch in der Lage bist etwas nachzufragen. Also lassen wir es darauf beruhen.
BlackJack

@tjost: Nein, „syntaktisch“ ist nicht mein Lieblingswort. Und was hätte ich denn Nachfragen sollen? Ich *habe* nachgefragt was Du Dir dabei gedacht hast, bei der syntaktisch falschen Zeile.

Ich habe auch deutlich eingestanden das ich von meinem Wissenstand ausgehe, denn das ist das einzige von dem ich ausgehen *kann*. Wovon soll ich denn sonst ausgehen? Hellsehen? Und nachdem Du Code gezeigt hast der Grafiken lädt, verkleinert, und in Bitmaps unwandelt *und* Du eine riesige, farbige Grafik von Sky Cinema HD gezeigt hast, soll man auf die Idee kommen mal nachzufragen ob Du vielleicht gar keine grossen bunten Grafiken hast? Warum dann der Code und die grosse bunte Beispielgrafik? Du führst selbst andere in die Irre und wirfst dann vor das sie es immer noch nicht verstanden haben? :-)

Ein Skript verwendet nicht automatisch wenig Ressourcen weil es in Kodi läuft und Du sagst ja selbst es ist eine Endlosschleife — an welcher Stelle steht denn, dass auf das wechseln des Kanals gewartet werden soll? Ich sehe da nichts. Es wird ständig ein Bild geladen, verkleiner, umgewandelt, und an das Display geschickt — auch wenn der Kanal nicht gewechselt wird. Das steht da so im Quelltext. Computer machen nicht was man eigentlich meinte oder gerne hätte, sondern genau das was man sagt. Und Dein Code sagt: verschwende Rechenzeit; so viel wie Du schaffst. Wenn Dir das nichts ausmacht, okay, aber man wird ja wohl darauf hinweisen dürfen.
tjost
User
Beiträge: 20
Registriert: Freitag 23. Juni 2017, 21:29

Ich habe mehrfach versucht es zu erklären. Ich habe in meinen Berufen immer gelernt das man nicht von seinem eigenem Wissensstand ausgehen darf sondern sich in den Kunden versetzen muss.
Ich habe auch deutlich eingestanden das ich von meinem Wissenstand ausgehe, denn das ist das einzige von dem ich ausgehen *kann*. Wovon soll ich denn sonst ausgehen? Hellsehen? Und nachdem Du Code gezeigt hast der Grafiken lädt, verkleinert, und in Bitmaps unwandelt *und* Du eine riesige, farbige Grafik von Sky Cinema HD gezeigt hast, soll man auf die Idee kommen mal nachzufragen ob Du vielleicht gar keine grossen bunten Grafiken hast? Warum dann der Code und die grosse bunte Beispielgrafik? Du führst selbst andere in die Irre und wirfst dann vor das sie es immer noch nicht verstanden haben? :-)
Ich sage mal da haben wir aneinander vorbei geredet.

Also. Ich sehe den Code so:

Code: Alles auswählen

disp.begin()

# Clear display. 
disp.clear() 
disp.display()
Ich lösche das Display stelle nichts dar.

Code: Alles auswählen

while True:
	
	thumb = xbmc.getInfoLabel("VideoPlayer.ChannelName")

	suffix = '.png'
	path = addon.getAddonInfo('path').decode('utf-8')
	fullpath = os.path.join(path, 'icon/')
	display = os.path.join(fullpath, thumb + suffix)
	time.sleep(2)
	image = Image.open(display).resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

# Display image.
	disp.image(image)
	disp.display()
Es wird ein Subprocess gestartet hier wird auf einen Wert gewartet,
Ist ein Wert vorhanden wird der in "thumb" eingelesen bzw. wird ein Wert ausgegeben ohne Inhalt was in "…/Pfad/.png" endet dann stellt er das Bild dar wenn es vorhanden ist.
ich füge suffix und path zusammen
ich hänge "icon/" an den Pfad
ich gebe die komplette Adresse and "display"
kurz warten
ich sage dem Wert "image" öffne das Bild aus dem kompletten Pfad "fullpath" passe die große an und konvertiere es.
"image" wird ausgegeben
mache nichts.

Prozessorauslastung ist völlig normal. Alle Kerne soweit ich das sehen kann.
Ich gehe halt davon aus das das Skript erst wieder ausgeführt wird wenn der Wert thumb sich ändert.
Man müsste jetzt sehen wie die Library das macht die kann ich aber nach der Installation nicht wiederfinden.
https://github.com/adafruit/Adafruit_Python_SSD1306
Du kannst es Dir ja mal ansehen wenn Du lust hast.


Mein Problem von Anfang an war halt das ich das os.path.join nicht kannte und auch nicht gefunden hatte.
Zuletzt geändert von Anonymous am Mittwoch 28. Juni 2017, 11:27, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Antworten