print(variable) doesn't work. Why??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
paradoxson
User
Beiträge: 1
Registriert: Dienstag 17. Mai 2022, 15:01

Hello All,

i wrote a short python Prog and put some print's within to check the status of the variables

Here is the Code:

# import re
import os
#import pandas as pd
from pathlib import Path
# import hashlib
from sys import argv
print("Hallo Welt")
print("!")
# --------------------------------------------------------------------------
speicher =[]
Dateiuebersicht = []
link = r"O:\Marcel_W\Diagdcf"
Daten_Verzeichnis: Path = Path(link)
for Ordnerinhalt in os.walk(Daten_Verzeichnis):
for Datei_Name in Ordnerinhalt[2]:
full_path: Path = Path(Ordnerinhalt[0]) / Path(Datei_Name)
if (full_path.suffix.lower() == ".cap") & (
int(full_path.stat().st_size) > 1):
**print(full_path.stat().st_size)
print(full_path.stat().st_mtime)
print((full_path.suffix))**
Dateiuebersicht.append(Path(Ordnerinhalt[0], Datei_Name))
**print("Hier")
print(Dateiuebersicht)**


The Output stated:
C:/Users/nx023526/PycharmProjects/django-datta-able-master/apps/read_parset_log.py
Hallo Welt
!
Process finished with exit code 0


Can anyone help me to find the Reason why print "Hello World works" but printing the variables is not possible?? Using the Programm step by step in the python console is no problem.
Big thanks in advance.

Best Regards
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

Poste deinen Code zwischen Code-Tags, damit die Einrückung erhalten bleibt. Code-Tags werden automatisch eingefügt, wenn du den </>-Button im "vollständigen Editor" drückst.

Was sollen die 2 * vor den print-Statements?

Namen schreibt man in Python klein_mit_unterstrich.

Du überschreibs den Namen "Path", den du importierst, mit etwas eigenem. Das ist falsch.

Warum verwendest das pathlib-Modul (was gut ist) und benutzt aber nicht dessen Funktionen sondenr os.path.walk? Warum?

Deine if-Statements sind falsch. "&" ist in Python ein bitweiser Operator? Willst du das hier? Oder willst du eher "and" als logischen Operator verwenden?

Die Klammerung der Bedinungen bei deinen if-Statements ist konfus und falsch. Man muss bedingungen nicht zwanghaft klammern. Und bist du dir sicher, dass du das Ergebnis einer Vergleichsoperation (wo True oder False heraus kommt) in eine Ganzzahl zu wandeln?

Die konkrete Antwort, warum da nichts ausgegeben wird: Weil die Zeilen nicht erreicht werden.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@paradoxson: Das importierte `argv` wird nirgends verwendet und das definierte `speicher` auch nicht.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Selbst wenn man Typannotationen toll finden würde, macht es überhaupt keinen Sinn direkt bei einer offensichtlichen Zuweisung den Typ auf beiden Seiten der Zuweisung zu wiederholen. Es gibt AFAIK keine Typprüfung für Python die *das* nicht selbst inferieren kann das etwas was mit ``Path(…)`` erstellt ist vom Typ `Path` ist. Weder einem menschlichen Leser noch dem Rechner/einer Typprüfung liefert das irgendeine zusätzliche Erkenntnis.

Magische Indexzugriffe wie ``ordnerinhalt[2]`` und ``ordnerinhalt[0]`` fördern nicht wirklich das Veständnis was da passiert. Hier kann man sich nicht einmal auf schlechte Beispiele in der Dokumentation berufen, denn dort werden die Elemente die `os.walk()` liefert direkt an sprechende Namen gebunden.

Der Wert den `full_path` zugewiesen bekommt sollte man nur einmal erstellen und nicht zweimal, und das auch noch über unterschiedliche Wege, so das ein Leser vermuten könnte es könnte dort etwas anderes herauskommen.

``&`` ist die bitweise Verknüpfung, die logische Und-Verknüpfung heisst ``and`` und hat auch einen für diesen Fall sinnvolleren Operatorvorrand, so dass man keine Klammern um die Teilbedingungen setzen muss.

Das `st_size`-Attribut ist bereits eine ganze Zahl, da muss man nicht noch einmal `int()` mit aufrufen.

Zwischenstand:

Code: Alles auswählen

#!/usr/bin/env python3
import os
from pathlib import Path


def main():
    print("Hallo Welt")
    paths = []
    for root_path, _, filenames in os.walk(Path(R"O:\Marcel_W\Diagdcf")):
        for filename in filenames:
            file_path = Path(root_path, filename)
            if (
                file_path.suffix.lower() == ".cap"
                and file_path.stat().st_size > 1
            ):
                print(file_path.stat().st_size)
                print(file_path.stat().st_mtime)
                print(file_path.suffix)
                paths.append(file_path)
                print("Hier")
                print(paths)


if __name__ == "__main__":
    main()
Allerdings macht es nicht so wirklich Sinn `Path` zu verwenden und dann auf `os.walk()` zurück zu fallen statt die `rglob()`-Methode zu verwenden:

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path


def main():
    print("Hallo Welt")
    paths = []
    for path in Path(R"O:\Marcel_W\Diagdcf").rglob("*.cap"):
        if path.is_file() and path.stat().st_size > 1:
            print(path.stat().st_size)
            print(path.stat().st_mtime)
            print(path.suffix)
            paths.append(path)
            print("Hier")
            print(paths)


if __name__ == "__main__":
    main()
Und wenn irgendeine Variante, inklusive Deines Ausgangsquelltextes, nichts weiter als die Ausgaben vor der Schleife liefert, dann sind halt einfach keine Dateien vorhanden auf welche die Kriterien zutreffen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten