Seite 1 von 1

Arbeiten mit Dateien / Verzeichnissen

Verfasst: Mittwoch 25. August 2010, 14:38
von mcdaniels
Hallo!
Ich dürfte nun bei meinem ersten simplen Vorhaben zumindest mal den ersten Schritt getan zu haben: Auswahl eines Laufwerkes + Einlesen der Verzeichnisse und Files auf diesem Laufwerk in eine Liste und Ausgabe.

Code: Alles auswählen

import os

def abfrage_laufwerk():    
    """Aufzulistendes Laufwerk auswaehlen"""
    laufwerk = input('Laufwerksbuchstabe: ')
    if ":" not in laufwerk:
         laufwerk = laufwerk + ":\\"
    return laufwerk

wahl_laufwerk = abfrage_laufwerk()
print ('Gewählt Laufwerk ' + wahl_laufwerk)
print ('='*19)

def verzeichnisse_einlesen():
    """Verzeichnisse des gewaehlten Laufwerks in Liste einlesen und ausgeben"""
    verzeichnisse = []
    wert = verzeichnisse.append(os.listdir(wahl_laufwerk))
    return verzeichnisse

anzeigen = verzeichnisse_einlesen()
print('Verzeichnisse / Dateien:')
print(anzeigen)
Folgendes habe ich noch vor:

1. "umschaufeln" der momentan als Einzellisteintrag vorhandenen Dateien/Verzeichnisse in eine Liste, in der jeder Eintrag einem Listelement entspricht
2. Auswahlmöglichkeit der Verzeichnisse mit Cursortasten + Return wählt aus und gibt den Inhalt des gewählten Verzeichnisses wieder
3. Möglichkeit eine Datei zu erstellen und Text hineinzuschreiben und zu speichern
4. Datei anzeigen

Fragen:
1. Kann man den Quelltext bislang so stehen lassen?
2. Unter Linux kommt meine Variante wohl nicht zu tragen, da es unter Linux ja keine Laufwerksbuchstaben gibt sondern nur in das Dateisystem "eingehängte" Devices.
Auch die Pfade werden nicht per \irgendwas angesprochen sondern /irgendwas.

Für Linux müsste ich das "Ding" also umschreiben, oder?

Etwas viel wahrscheinlich. Punkt 1 dürft ich eventuell noch hinbringen, bei den folgenden Punkten - vor allem Punkt 2. siehts im Moment noch dunkel aus :-)

LG

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Mittwoch 25. August 2010, 14:50
von Nebelhom
Also das erste was mir auffaellt, ist, dass du fuer deine Pfade vielleicht eher das os.path.abspath modul benutzen solltest anstatt von string concatenation. Das wurde mir auf jeden fall von den erfahrenen programmierern im forum mehrmals ans herz gelegt. Damit loest du auch das problem mit der verzeichnisabtrennung im pfad (windows \ und linux /). am besten doku dazu lesen.

Was frage 2 angeht, bin ich nicht mehr so in linux drinnen, aber wenn du die verzeichnisabfrage optional machst, je nach OS, geht das bestimmt auch in linux (das geht ja meist via /home/ oder sowas ohne laufwerkbuchstabe). Du kannst sys importieren und da gibt es eine moeglichkeit fuer dein skript zu testen, welches OS du benutzt (sys.platform?; schau am besten in der doku).

den letzten paragraph nur mit vorsicht geniessen und ausprobieren. evtl. auf eine qualifiziertere antwort warten.

Hope that helps.

Johannes

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Mittwoch 25. August 2010, 14:59
von Hyperion
Für das Zusammensetzen von Pfaden vor allem "join()". In Python 2.x "os.path.join", evtl. in 3.x direkt in "os"... meine mich daran zu erinnern; naja in der Doku stehts ja :-)

Evtl. bietet sich auch die os.walk() Funktion an, will man alle Verzeichnisse haben.

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Mittwoch 25. August 2010, 15:03
von BlackJack
@mdaniels: ``a = a + b`` kann man etwas kürzer schreiben als ``a += b``.

Bei `verzeichnisse_einlesen()` habe ich nicht so ganz verstanden was die Liste da soll. Überleg mal was `os.listdir()` zurückgibt. Der Docstring stimmt nicht ganz, denn es wird in der Funktion nichts ausgegeben.

`anzeigen` ist ein schlechter Name für eine Liste mit Dateinamen. Der Name klingt eher nach einer Funktion die etwas anzeigt.

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Mittwoch 25. August 2010, 15:14
von mcdaniels
Eure Responsezeit ist ein Wahnsinn :-)

Danke für die Tips!
@Hyperion: Ich glaube, es wird jetzt wieder ein wenig dauern, bis hier was neues von mir kommt. Muss erst "weiterstudieren" und mir dann überlegen wie ich das umsetze. :-)

@Blackjack:
os.listdir() gibt ja bereits eine Liste zurück :oops:

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Donnerstag 26. August 2010, 10:18
von mcdaniels
Folgendes betreffend Inhalt der Liste nach Listindex ausgeben habe ich nun erstellt, wobei der Pfad momentan fix ist:

Code: Alles auswählen

def verzeichnisse_einlesen():
    """Verzeichnisse des gewaehlten Verzeichnisses einlesen"""
    verzeichnisse = os.listdir('/')
    return sorted(verzeichnisse)

anzeigen = verzeichnisse_einlesen()
print('Verzeichnisse / Dateien:')

elemente = len(anzeigen)
listen_zaehler = 0
print (anzeigen[0])
while True:
    navigieren = input('Liste durchgehen: n = nächster, v = vorheriger, g=gesamt:')
    if navigieren == "n" and listen_zaehler != elemente -1: #elemente - 1 da sonst anzeigen[] out of index läuft
        listen_zaehler += 1
        print (anzeigen[listen_zaehler])
 
        
    if navigieren == "v" and listen_zaehler != 0 and listen_zaehler <= elemente:
        listen_zaehler -= 1
        print (anzeigen[listen_zaehler])

    if navigieren == "g":
        for datensaetze in anzeigen:
            print (datensaetze)

Jetzt werd ich mir mal anschauen ob ich den Tip betreffend "Tasteneingabe abfangen" (anderer Thread von mir) umsetzen kann. Ich weiß, hier hab ich wieder globale Variablen und man könnte da mit Funktionen arbeiten. Werde das machen, sobald alles wie gewünscht funktioniert. :-)

LG

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Donnerstag 26. August 2010, 10:31
von Nebelhom
rein interessehalber.

wie kommst du aus dem while True: loop raus?

so wie ich das sehe wird der endlos laufen, oder irgendwann eine exception werfen oder habe ich da was uebersehen?

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Donnerstag 26. August 2010, 10:44
von mcdaniels
Hallo!
Zur Zeit läuft das endlos bis STRG + C ;-), du hast also recht.

edit mit x wird "while" verlassen:

Code: Alles auswählen

aussteigen = 0

while  aussteigen == 0:
    navigieren = input('Liste durchgehen: n = nächster, v = vorheriger, g = gesamt, x = exit:')
    if navigieren == "n" and listen_zaehler != elemente -1: #elemente - 1 da sonst anzeigen[] out of index läuft
        listen_zaehler += 1
        print (anzeigen[listen_zaehler])
 
    if navigieren == "v" and listen_zaehler != 0 and listen_zaehler <= elemente:
        listen_zaehler -= 1
        print (anzeigen[listen_zaehler])

    if navigieren == "g":
        for listen_eintraege in anzeigen:
            print (listen_eintraege)

    if navigieren == "x":
        aussteigen = 1
        exit
LG

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Donnerstag 26. August 2010, 11:26
von EyDu
Hallo.

elif existiert und dein exit wird auch nicht aufgerufen. Du möchtest außerdem lieber ein break verwenden um die Schleife zu verlassen.

Re: Arbeiten mit Dateien / Verzeichnissen

Verfasst: Donnerstag 26. August 2010, 11:59
von mcdaniels
@EyDu:
Stimmt natürlich, das möchte ich :-)