Sourcecode im Quell Laufwerk

Probleme bei der Installation?
sennebub
User
Beiträge: 4
Registriert: Donnerstag 17. Oktober 2024, 10:37

Hallo

Ich mache gerade meine ersten Übungen mit Python 3.13.
Aktuell auf Win 11, später auf Debian.

Ich benötige Angaben, wie / wo sich Python 3.13 wohl fühlt. Analog meinem Auto, wo ich weiss was meine Aufgaben sind, damit das Gerät verlässig läuft.

Ich stelle diese Frage aus folgendem Grund. Ich habe mit der KI über eine Stunde verloren, ohne den Grund zu finden weshalb dieser simple Code in "VS Code" nicht läuft.

Code: Alles auswählen

f2 = open('laender.txt', 'rt')
for line in f2:
    print(line, end='')
f2.close()
Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'f2' is not defined
>>> f2.close()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'f2' is not defined
>>>
Ich sehe die Datei "länder.txt" in meinem WorkDir. Ich habe den Dateinamen über "umbennen" in das Clipboard geholt und in den Code eingefügt.
Das WorkDir ist ein über SMB V3 angebundener Network Storage. Der PC ist Win11

Danach habe ich das WorkDir in ein neues lokales Verzeichnis (c:\tmp\play-python) kopiert. Jetzt läuft es.

Ich habe eine Checkliste mit den Regeln (Variablenanmen, einrücken, Gross- / Kleinschreibung, etc.)
Was muss ich berücksichtigen, damit Python seinen Job erledigt?`

Ich habe hier mehrere Computer mit verschiedenen Betriebssytemen und kann eine Wohlfühl Umgebung bieten.

Grüsse an die Teilnehmer
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

Ich habe keine Ahnung, was du mit Wohlfühlumgebung meinst. Mir ist neu, dass sich Programme wohlfühlen wollen.

Die Fehlermeldung hat nichts damit zu tun, dass eine Datei nicht gefunden wird. Wäre das der Fall, würde eine FileNotFoundError Exception ausgelöst werden.
Ich tippe auf einen Tippfehler bei der Benennung. Also dein gezeigter Quellcode nicht dem entspricht, was du wirklich ausgeführt hast.

Außerdem:
'laender.txt' != 'länder.txt'
Du verwendest in deinem Text einen anderen Namen als in deinem Code.

Dateien öffnet man mit dem with Statement und spart sich das close.
Außerdem sollte immer das Encoding angegeben werden, in der die Datei geschrieben wurde. Das fehlt bei dir komplett. Wie ist die Kodierung der Datei?

Code: Alles auswählen

with open("laender.txt", "r") as  f:
    for line in f:
        print(line)
Verwende kein Python 3.13. Das ist zu neu und du wirst auf Schwierigkeiten stoßen, wenn Module noch nicht für 3.13 bereit stehen.

Hör auf irgendwelche KIs zu verwenden sondern arbeite dich durch das offizielle Python Tutorial.
sennebub
User
Beiträge: 4
Registriert: Donnerstag 17. Oktober 2024, 10:37

Hallo Sparrow

Computer und Umlaute meide ich. Ergo wird im Code ein Dateiname aus "ä" ein "ae".
Der Sachverhalt tritt sowohl mit 3.11 als auch 3.13 auf.

Jede Applikation hat seine Details damit es sich "wohl fühlt".
Linux kann ich ein Jahr stabil rennen lassen. Windows läuft besser mit periodischem Neustart.
NTFS hat eine Pfadbegrenzung, anders als NFS
Windows interpretiert die Suffix einer Datei für die Ausführung. Linux nicht.
T.b.c.

Du hast keine Ahnung, was ich in meinem Leben bereits für Fachkenntnisse bzw. Erfahrungen gewonnen habe.
Du machst zu viele Worte für den einfachen Sachverhalt das Du keine Ahnung hast.
Dann doch StackOverFlow fragen.

Last but not least:
Diese rüde und mangelhafte Antwort ist keine Werbung für das Forum.
Wenn das hier der Standard ist, dann werde ich mich gleich wieder abmelden.

Grüsse an die Teilnehmer
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Bitte beschreibe exakt, was Du getan hast. Der Code und die Fehlermeldung passen nicht zusammen. Die Fehlermeldung sieht so aus, als ob es Teile aus einer Interaktiven Session sind, aber was Du davor gemacht hast, wird daraus nicht klar, ergo kann man auch nicht sagen, was Du falsch machst.
Benutzeravatar
__blackjack__
User
Beiträge: 13998
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sennebub: Du hast recht, wir haben keine Ahnung was Du an Fachkenntnissen bereits gewonnen hast. Wie sollen wir also genau auf dieses Level passend antworten? Wir gehen bei so einer Anfängerfrage halt von einem Anfänger aus. Weitergehende Annahmen zu treffen ist nicht so wirklich sinnvoll.

Was bei den Fehlermeldungen auch komisch ist sind die ``>>>``. Offenbar wurde das ``f2.close()`` in einer interaktiven Python-Shell eingegeben, ist also gar nicht Bestandteil eines Programms. Und beim ersten Traceback sieht man nicht wie der zustande gekommen ist.

Was bei sparrows Beispiel noch fehlt ist die Kodierungsangabe, damit Python nicht ”raten” muss. Denn es gibt ja durchaus Ländernamen mit Zeichen ausserhalb von ASCII. Oder steht *in* der Datei dann auch „Oesterreich“ statt „Österreich“? Aber selbst dann würde ich explizit ASCII als Kodierung angeben um komische Überraschungen zu vermeiden wenn da doch mal was ausserhalb von ASCII in der Datei steht.

Ich würde ausserdem das `f` sinnvoller benennen. `file` oder `lines`. Einbuchstabige Namen sind selten gute Namen.

Code: Alles auswählen

with open("laender.txt", "r", encoding="utf-8") as lines:
    for line in lines:
        print(line)
Die Python-Dokumentation hat übrigens Abschnitte für die verschiedenen Betriebssysteme und das ausführen von Python-Programmen.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
DeaD_EyE
User
Beiträge: 1219
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

sennebub hat geschrieben: Donnerstag 17. Oktober 2024, 14:31 Diese rüde und mangelhafte Antwort ist keine Werbung für das Forum.
Wenn das hier der Standard ist, dann werde ich mich gleich wieder abmelden.
Wenn du bei jemanden zu Besuch bist, verhältst du dich sicherlich anders als hier im Forum.

Code: Alles auswählen

echo "Hello World" > laender.txt

Code: Alles auswählen

f2 = open('laender.txt', 'rt')
for line in f2:
    print(line, end='')
f2.close()
C:\Users\XXX>echo Hello World > laender.txt

C:\Users\XXX>notepad laender.py

C:\Users\XXX>py laender.py
Hello World

C:\Users\XXX>
Und unter Linux (gleicher Code):
public@ganymed:~$ nano -w laender.py
public@ganymed:~$ echo "Hello World" > laender.txt
public@ganymed:~$ python laender.py
public@ganymed:~$ python laender.py
Hello World
public@ganymed:~$
Ich würde es aber so schreiben:

Code: Alles auswählen

from pathlib import Path

# laender.txt im Benutzerverzeichnis
laender = Path.home() / "laender.txt"

# explizites encoding, kann aber in den meisten Fällen entfallen,
# es seiden man erwischt ein OS, dass Standardmäßig textdateien anders encodiert
# oder es ist etwas, dass vom Standard-Encoding utf8 abweicht

with laender.open("r", encoding="utf8") as fd:
    for line in fd:
        print(line, end="")
Dann wird angenommen, dass laender.txt in deinem Benutzerverzeichnis ist und das funktioniert unter Windows, Linux, macOS, Android, IOS und den BSD-Derivaten.
Das hat auch den Vorteil, dass die Anwendung nicht aus dem Verzeichnis heraus gestartet werden muss, wo sich die Textdatei befindet.

Ich habe keine Ahnung, wie dein Wissensstand bei Pfaden ist. Es gibt relative und absolute Pfade. Wenn man relative Pfade nutzt, bezieht sich das OS immer auf das aktuelle Arbeitsverzeichnis. Man kann aus relativen Pfadangaben absolute Pfade erstellen, wenn man einen absoluten Pfad im Dateisystem mit dem relativen Pfad verbindet. Das mache ich mit Path.home(), was das Benutzerverzeichnis des aktuellen Nutzers ausgibt, der das Programm ausführt. Path-Objekte können mit dem "/" verbunden werden. Es gibt aber auch die Methode Path(...).joinpath(..., ..., ...), die man verwenden kann.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

wenn man `pathlib` nutzt, dann könnte man auch `read_text()` verwenden. (Vllt nicht immer passend?)

Code: Alles auswählen

from pathlib import Path

PATH_TO_COUNTRIES_FILE = Path.home() / "PycharmProjects/Forum/laender.txt"


def main():
    print(PATH_TO_COUNTRIES_FILE.read_text('UTF-8'))


if __name__ == "__main__":
    main()
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
sennebub
User
Beiträge: 4
Registriert: Donnerstag 17. Oktober 2024, 10:37

Hallo

Danke für die weiteren Information.
Übersehe ich die Möglichkeit direkt auf jeden Post zu antworten?

Ausgangslage bzw. "Use Case"
Ich arbeite mit in Python 3 ein. Dazu verwende ich sowohl den Python Interpreter direkt (CMD) als auch VS Code.
D.h. ich arbeite in einer reinen Testumgebung, wo keine AddOns installiert oder wiederholte Konfigurationsänderungen statt fanden.
Damit ich mich auf den zu lernen Stoff konzentrieren kann, bereite ich vorher einen sauberen Playground vor.
So das ich die Beispiele und Übungen ohne Abweichung durchspielen kann.

Beobachtung
Der Fehler tritt sporadisch auf. Ich kann es noch nicht reproduzieren. U.a. wegen Zeitmangel.
IMO hängt es mit den Pfaden in Netzlaufwerken zusammen. Ich verwende weder Umlaute, noch Icons in den Verzeichnisnamen.
Jedes Verzeichnis hat einen 7-Bit ASCII Code Namen.

@sirius3
VS Code diese Codezeilen geschrieben und über "Shift Enter" im Terminal ausgeführt

Code: Alles auswählen

f2 = open('laender.txt', 'rt')
for line in f2:
    print(line, end='')
f2.close()
@__blackjack__
Danke für den Hinweis zur https://docs.python.org/3/using/windows.html Python Doku und OS (RT[F]M)

Diese Aussage ergibt keinen Sinn. Die Datei heisst "laender.txt". Die Textdatei wurde mit einem WinEditor erstellt. D.h. UTF-8
Im Lehrbuch für diesen Code steht kein Hinweis, dass ich diesem Beispiel auf die Codierung der Datei etwas parameterisiert werden muss

@DeaD_EyE
Nein? Es gibt gerade heute eine Vielzahl von "Kulturen" inklusive den Cyberpunks. Somit verstehe ich Deine Intention nicht.
Last but not least:
Wenn ich einen Schild aufhänge und Hilfe zum schreiben eines Buches anbiete, dann werde ich den "Besucher" nicht anschnauzen, dass er gefälligst keine KI nehmen soll.
Sowieso solle man nicht die neuesten Federkiel Modelle verwenden.
Ich stelle Rückfragen, mache Notizen, versuche Ein und Auszugrenzen, etc.

Danke für Dein Code Snippet, dass Du unter einer Vielzahl von OS gespeichert hast

Code: Alles auswählen

from pathlib import Path

# laender.txt im Benutzerverzeichnis
laender = Path.home() / "laender.txt"

with laender.open("r", encoding="utf8") as fd:
    for line in fd:
        print(line, end="")
Annahme:
In den gängigen Programmiersprachen, kann ich eine Textdatei die im lokalen Verzeichnis des Sourcodes ist ohne weitere Umstände öffnen.
Daher gehe ich davon aus, dass das auch bei Python 3 so ist. Daraus leite ich ab, dass der Code in Linux / Win / MacOS auch in dieser reduzierten Form funktionieren wird.
Korrekt?

Code: Alles auswählen

with laender.open("r", encoding="utf8") as fd:
    for line in fd:
        print(line, end="")
@Dennis89
Verstehe ich Dich richtig, dass Python 3 keine integrale Funktion für das lesen einer Textdatei hat? Man muss zuerst eine Library laden?

Beste Grüsse
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

Ne, das verstehst du falsch. Du benutzt `open` mit "r" ja schon und die anderen Beispiele tun das auch. Ich habe nur darauf hingewiesen, dass man das nicht ausschreiben muss, wenn man schon `pathlib` verwendet.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
DeaD_EyE
User
Beiträge: 1219
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Annahme:
In den gängigen Programmiersprachen, kann ich eine Textdatei die im lokalen Verzeichnis des Sourcodes ist ohne weitere Umstände öffnen.
Daher gehe ich davon aus, dass das auch bei Python 3 so ist. Daraus leite ich ab, dass der Code in Linux / Win / MacOS auch in dieser reduzierten Form funktionieren wird.
Korrekt?
Sofern der Pfad richtig ist, die Datei existiert und die Zugriffsberechtigungen vorhanden sind, öffnet das OS für den Python-Interpreter die Datei. Der Interpreter ruft den Syscall zum Öffnen einer Datei auf und bekommt einen FileDescriptor, der einfach nur eine Ganzzahl ist. Unter Windows ist es ein FileHandle (etwas anders als unter Linux). Python vereinheitlicht das und baut ein schönes Interface drumherum.

Um mal an der zweiten Frage anzuknüpfen, natürlich kann Python auch ohne pathlib Dateien öffnen. Path.read_text() verwendet open mit einem Kontextmanager. Was du aber nicht siehnst, sind die ganzen versteckten Imports beim Start des Python-Interpreters.

Imports bei einem leeren Programm (kein Inhalt):
C:\Users\XXX>py -X importtime test.py
import time: self [us] | cumulative | imported package
import time: 126 | 126 | winreg
import time: 265 | 265 | _io
import time: 53 | 53 | marshal
import time: 258 | 258 | nt
import time: 1246 | 1821 | _frozen_importlib_external
import time: 968 | 968 | time
import time: 543 | 1511 | zipimport
import time: 77 | 77 | _codecs
import time: 819 | 896 | codecs
import time: 964 | 964 | encodings.aliases
import time: 2319 | 4179 | encodings
import time: 433 | 433 | encodings.utf_8
import time: 448 | 448 | encodings.cp1252
import time: 59 | 59 | _signal
import time: 42 | 42 | _abc
import time: 353 | 395 | abc
import time: 354 | 749 | io
import time: 67 | 67 | _stat
import time: 231 | 297 | stat
import time: 986 | 986 | _collections_abc
import time: 78 | 78 | genericpath
import time: 131 | 131 | _winapi
import time: 563 | 771 | ntpath
import time: 906 | 2959 | os
import time: 294 | 294 | _sitebuiltins
import time: 407 | 407 | encodings.utf_8_sig
import time: 1255 | 1255 | _distutils_hack
import time: 421 | 421 | sitecustomize
import time: 452 | 452 | usercustomize
import time: 2005 | 7791 | site
Unter Linux werden ein paar andere Module importiert, aber ist ziemlich ähnlich.

Python hat aber gute Methoden entwickelt, das Importieren eines Moduls so gut wie möglich zu beschleunigen und auch zu cachen.
D.h. wenn man 100 Mal dasselbe importiert, wird in Wirklichkeit nur einmal importiert.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

@sennebub:

Das was du zeigst, passt nicht zu deinen Ausführungen.
Wie hier im Thread bereits festgestellt wurde, ist das Codebeispiel aus deinem ersten Post ein Ausschnitt aus einer Session im interaktiven Interpreter.
Und da sagt dir Python was nicht richtig ist: Der Name f2 wurde nicht definiert.
Dieser Fehler kann nicht auftreten, wenn du das hier gezeigte Programm nicht im interaktiven Interpreter ausführst. Denn dort ist f2 definiert.

Es bleibt also bei der Aufforderung von Sirius3: Zeig den Code, den du tatsächlich ausführst und die dazugehörige, komplette Fehlermeldung.

Ich persönlich finde es übrigens ein bisschen verwunderlich, wie du Leuten sagst, dass ihre Aussagen keinen Sinn machen. Machen die durchaus. Deshalb solltest du die Antworten, insbesondere die von __blackjack__ noch einmal in Ruhe lesen. Falls du Verständnisprobleme hast, solltest du die in meinen Augen benennen und nicht herleiten, dass nur du einen Sinn erkennst.

Und was soll eigentlich ein "lokales Verzeichnis" sein? Ist das deine Bezeichnung für das aktuelle Arbeitsverzeichnis?
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Zum eigentlichen Problem:
Du gehst von falschen Voraussetzungen aus, was VS-Code tut, wenn man Ctrl+Enter eingibt.
Das führt nur die aktuelle Zeile in einem Interaktiven Interpreter aus. Und da Du nur die Zeile f2.close() ausführst, ergibt das natürlich den gezeigten Fehler.
Du solltest immer das gesamte Skript per run ausführen.
Benutzeravatar
__blackjack__
User
Beiträge: 13998
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sennebub: Welche Aussage ergibt keinen Sinn?

Wenn in Deinem Lehrbuch kein Hinweis zur Kodierungsangabe bei `open()` steht, dann fehlt dieser Hinweis halt im Lehrbuch. Wenn man keine Kodierung angibt, ist die verwendete vom System abhängig, das heisst das Programm verhält sich auf anderen Systemen anders oder auch auf dem gleichen System wenn man die enstprechenden Einstellungen ändert, also beispielsweise mit einem anderen Benutzerkonto mit anderen Einstellungen ausführt. Darum sollte man immer explizit die Kodierung angeben, in der die Textdaten dann auch tatsächlich vorliegen.

Die Annahme, dass man eine Textdatei die im Verzeichnis des Quelltextes/Programms liegt, ohne Umstände öffnen kann, ist falsch würde ich sagen. Nur mit Angabe des Dateinamens, oder auch einer relativen Pfadangabe, wird die Datei ausgehend vom aktuellen Arbeitsverzeichnis des Prozesses gesucht. Und das muss nicht das Verzeichnis sein in dem das Programm liegt. Das ist es manchmal, aber oft ist es das auch nicht. Man muss also explizit etwas tun — nämlich einen Pfad zur Laufzeit ermitteln, von dem man sicher ist, dass das Programm dort liegt.

In Python hilft einem dabei, dass der Dateipfad zum Modul *in* dem Modul unter dem Namen `__file__` als Zeichenkette zur Verfügung steht. Man kann das Verzeichnis also beispielsweise folgendermassen ermitteln (ungetestet):

Code: Alles auswählen

from pathlib import Path

SELF_PATH = Path(__file__).absolute().parent


def main():
    print("Das Programm liegt im Verzeichnis:", SELF_PATH)
    
    with (SELF_PATH / "laender.txt").open("r", encoding="UTF-8") as lines:
        for line in lines:
            print(line)
    #
    # oder wenn das zeilenweise lesen/ausgeben nicht wichtig ist:
    #
    print(SELF_PATH.read_text(encoding="UTF-8"))


if __name__ == "__main__":
    main()
Richtig, Python hat keine integrale Funktion für das einlesen einer Textdatei. Haben die meisten Programmiersprachen nicht‽ Aber `pathlib.Path` aus der Standardbibliothek hat eine Methode dafür.

Ich glaube Du hast ein Problem wie Du die Beiträge liest. Lies das einfach mal als neutral gesprochene, gut gemeinte Hinweise. Denn es hat Dich niemand angeschnauzt keine KI zu verwenden. Das hast Du anscheinend in einer anderen Tonlage gelesen, als es geschrieben wurde.

@sparrow: Lokales Verzeichnis ist kein Verzeichnis auf einem Netzlaufwerk. Das ist schon korrekt so, die Verwendung.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

@__blackjack__: Dass das ein Lokales Verzeichnis ist, ist klar. Aber die Formulierung "im lokalen Verzeichnis des Sourcodes" von sennebub, lässt mich vermuten, dass damit eher das Problem des aktuellen Arbeitsverzeichnisses oder allgemein das Verzeichnis das Verzeichnis gemeint ist, in dem das Script liegt. Daher meine Nachfrage,. Ob das lokal ist oder nicht merkt man ja eher nicht. Das Thema hast du ja aufgegriffen.
Benutzeravatar
__blackjack__
User
Beiträge: 13998
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sparrow: Zitat aus dem ersten Beitrag:
Das WorkDir ist ein über SMB V3 angebundener Network Storage. Der PC ist Win11

Danach habe ich das WorkDir in ein neues lokales Verzeichnis (c:\tmp\play-python) kopiert. Jetzt läuft es.
Das klingt für mich danach das der Unterschied hier wirklich Netzwerk vs. lokaler Datenträger gemeint ist.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

sennebub hat geschrieben: Freitag 18. Oktober 2024, 09:14 Sowieso solle man nicht die neuesten Federkiel Modelle verwenden.
Bei dem Federkiel kann man aber selbst als Laie erkennen, ob der kleckst oder schwergängig ist und sowieso hängt da das Ergebnis auch maßgeblich von den eigenen kalligrafischen Fertigkeiten ab.
Wenn man als Python-Anfänger eine KI bemüht, ist das aber eher so, als würde man für eine Sprache, die man nicht beherrscht einen Dolmetscher beauftragen, der zwar sehr freundlich aber auch sehr bekifft ist und bei dem du nicht sicher sein kann, ob er vom dem, was er übersetzen soll, nicht die eine Hälfte vergessen und die andere frei zusammen phantasiert hat. Um das Ergebnis einer KI einschätzen zu können, muss man bei Code, der nicht komplett trivial ist, eigentlich Python bereits so gut beherrschen, dass man ihn auch selbst schreiben könnte. Daher habe ich persönlich selten Lust, mich mit Code, bei denen der KI-Einsatz durch Anfänger sichtbar ist, zu befassen. Bei einem Menschen kann ich wenigstens Rückfragen zur Motivation stellen; bei KI Code weiß ich, im Zweifelsfall nur, dass da irgendwelche statischen Kennwerte ausreichend hoch waren, um das gezeigte Ergebnis zu erzeugen. Insofern ist der Rat, von KI als Anfänger die Finger zu lassen m.M.n. gerechtfertigt.
sennebub
User
Beiträge: 4
Registriert: Donnerstag 17. Oktober 2024, 10:37

Hallo

Falls es ein Tutorial zu dieser Forums Software gibt, bitte verlinken.
Sehe ich das richtig, dass man Bilder nur online verlinken kann?
Sehe ich das richtig, dass man einen Frage / Post nicht als gelöst markieren kann?

A:
Ich denke, dass ich mein Problem gelöst habe. Auf zusehen hin.

B
KISS:
Mehr braucht es nicht, um eine Textdatei im Sourceverzeichnis zu öffnen

Code: Alles auswählen

f = open('laender.txt', 'r')
content = f.read()
print(content)
f.close()
C
Bitte "Wissen" zu VS Code und "Shift - Enter" korrigieren.
In VS - Code z.B. diesen Code oben markieren und Sift + Enter drücken.
Oder Kontextmenu (rechte Maustaste) --> "Run Python" --> "Run Selection/Line in Python Terminal"
Zitat aus der VS Code Dokumentation:

Code: Alles auswählen

Select one or more lines, then press Shift+Enter or right-click and select Run Selection/Line in Python Terminal. This command is convenient for testing just a part of a file.
https://code.visualstudio.com/docs/pyth ... uick-start

D
"Lokaler Speicher" bzw. Verzeichnisse sind direkt (Kabel) an dem Rechner (PC) angeschlossen. "Storage" kann auch "nicht lokal" verwendet werden. Das nennt man Netzwerke (LAN / PAN / WAN / etc.).
Halten wir es einfach und lassen virtuelle Rechner aussen vor...

Ich diskutiere nicht über die Effizienz von KI Assistenten in der Software Entwicklung. Das erledigt sich seit 2022 in sehr schnellem Tempo von selbst.
Buchempfehlung: https://www.getstoryshots.com/de/books/ ... e-summary/
Ich diskutiere auch nicht über Philosophien und Ansichten. Jeder Mensch ist frei das für sich zu entscheiden.

In meiner Welt gibt es ein eine einfach Logik: Der Kunde / Schüler / Patient hat immer Recht
Kunde stellt Frage an Fachmann // Anfänger stellt Frage an den Routinier // Patient stellt Frage an den Arzt
Wenn der Fachmann / Routinier / Arzt etwas nicht versteht, stellt er Rückfrage auf der Kommunikationsebene des Fragers
Wenn der Kunde / Anfänger / Patient die Antwort nicht versteht, hat der Sender seine Aufgabe ungenügend wahrgenommen.

Was nehme ich mit?
Ich werde in einem anderen Fall, den Sachverhalt direkt im Python Compiler über ein gespeichertes [.py] File dokumentieren.
Ich werde keine ergänzende / unterstützende Software in Entwickklungsprozess erwähnen.
Ich werde zusätzlich mit der vorletzten (Minor-) Python Version testen
Ich werde (semantische) Unklarheiten und Verhaltensweisen nicht thematisieren

Mit den besten Wünschen zum Wochenende
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

Code: Alles auswählen

In meiner Welt gibt es ein eine einfach Logik: 
Diese Welt hat allerdings offensichtlich nichts mit der Realität in Online-Foren, die komplett auf Freiwilligkeit und dem Spaß daran, anderen zu helfen, beruht und in der keiner Aufgaben hat, die er/sie "ungenügend wahrnehmen könnte", zu tun.
Zuletzt geändert von nezzcarth am Freitag 18. Oktober 2024, 21:03, insgesamt 2-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4525
Registriert: Freitag 17. April 2009, 10:28

@sennebub:

B ist falsch.
Das öffnet die Datei im aktuellen Arbeitsverzeihnis. Ganz egal ob das lokal ist oder nicht ;)
Das kann, muss aber nicht, das Verzeichnis des Quellcodes sein.

Ansonsten bleibe ich bei der Empfehlung: Das offizielle Tutorial ist ein guter Einstieg in Python. Das schafft die Grundlagen. Ohne dir wird es IMHO schwer.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1219
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

sennebub hat geschrieben: Freitag 18. Oktober 2024, 20:22 In meiner Welt gibt es ein eine einfach Logik: Der Kunde / Schüler / Patient hat immer Recht
Meinst du den Elektriker, der den Fehlerstromschutzschalter auf Bitte des Kunden (hat immer recht) ausgebaut und überbrückt hat?
Habe ich selbst einmal erlebt. Wenn etwas passiert, stirbt jemand und der Elektriker kommt dann zu Recht in den Knast.

PS: sparrow hat Recht. Der Code öffnet den relativen Pfad im Arbeitsverzeichnis. Wenn du den Python-Interpreter in der Shell in diesem Verzeichnis aufrufst, dann funktioniert das. Wenn du das aber von einem anderen Ort aus machst, funktioniert das nicht. Das ist halt die Eigenschaft von relativen Pfaden. Die beziehen sich immer auf das aktuelle Arbeitsverzeichnis, das nicht das Scriptverzeichnis sein muss, aber sein kann.

Bevor du auf die Idee kommen solltest, das aktuelle Arbeitsverzeichnis via Python zu wechseln, mach es nicht. Es ist robuster, wenn man einen Ankerpunkt hat (absoluter Pfad) und dann mit dem relativen Pfad (z.B. test.txt) kombiniert.

PPS: Der Ankerpunkt kann auch das Script selbst sein.

Code: Alles auswählen

from pathlib import Path


SCRIPT_DIR = Path(__file__).absolute().parent

print(SCRIPT_DIR)
Den Code kannst du von überall ausführen und es wird immer das gleiche Verzeichnis (dort wo das gestartete Programm ist) angezeigt werden. Egal, welches Arbeitsverzeichnis gerade aktuell ist.
Zuletzt geändert von DeaD_EyE am Freitag 18. Oktober 2024, 21:54, insgesamt 2-mal geändert.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten