print-Anweisung zeitgleich in Tex-Widget umleiten

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

In os.walk() werden die Tupel erstellt. Wie genau das passiert kannst du nachlesen.
BlackJack

@Max77: Die Tupel werden von `os.walk()` erstellt und geliefert:

Code: Alles auswählen

def walk(top, topdown=True, onerror=None, followlinks=False):
    """Directory tree generator.

    For each directory in the directory tree rooted at top (including top
    itself, but excluding '.' and '..'), yields a 3-tuple

        dirpath, dirnames, filenames
    […]
    """
    islink, join, isdir = path.islink, path.join, path.isdir

    # We may not have read permission for top, in which case we can't
    # get a list of the files the directory contains.  os.path.walk
    # always suppressed the exception then, rather than blow up for a
    # minor reason when (say) a thousand readable directories are still
    # left to visit.  That logic is copied here.
    try:
        # Note that listdir and error are globals in this module due
        # to earlier import-*.
        names = listdir(top)
    except error, err:
        if onerror is not None:
            onerror(err)
        return

    dirs, nondirs = [], []
    for name in names:
        if isdir(join(top, name)):
            dirs.append(name)
        else:
            nondirs.append(name)

    if topdown:
        yield top, dirs, nondirs
    for name in dirs:
        new_path = join(top, name)
        if followlinks or not islink(new_path):
            for x in walk(new_path, topdown, onerror, followlinks):
                yield x
    if not topdown:
        yield top, dirs, nondirs
In Zeile 34 bzw. 41, je nach dem ob `topdown` wahr oder falsch ist, und in Zeile 39 werden die Tupel von dem rekursiven Aufruf durchgereicht. (Den DocString habe ich gekürzt wiedergegeben.)
Max77
User
Beiträge: 19
Registriert: Samstag 30. April 2016, 13:42

Jaaah Natürlich ! Man bin ich Blind. os.walk liefert ja eine Dreier-Tupel zurück.
Das hatte ich gar nicht mehr auf der „Rechnung“

Ich glaube die Funktion calculate_hashes verstanden zu haben.

Der 1. Parameter nimmt den zu untersuchenden Ordner+Pfad in Empfang.

Der 2. Parameter den DatenausgabeOrdner entgegen.

Mit dem 3. Parameter sagt man der Funktion WOHIN der Datenstrom geliefert werden soll.
In diesem Falle in eine Warteschlange.

calculate_hashes wird in einem Thread ausgeführt d.H. Die Funktion läuft parallel zur TK-GUI
und kann diese nicht mehr blockieren.

Aber der Abschnitt zwischen Zeile 25. und Zeile 30. ist mir noch nicht klar.
Wozu dient die while Schleife ?
Was bedeutet bytes = data.read(65536) ?

Ist bytes eine Build-In Funktion ?
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Natürlich kann man die Zeilen 25-30 auch eleganter lösen:

Code: Alles auswählen

            for block in iter(partial(in_file.read, block_size), b''):
                md5.update(block)
Wie schon am Anfang angesprochen wird irgendwann einmal der Arbeitsspeicher knapp, wenn man versucht von DVD-Images den Hashwert zu berechnen. Daher führt man die Rechnung in Häppchen durch.
Antworten