os.walk findet auch versteckte ordner

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
mys3lf
User
Beiträge: 5
Registriert: Donnerstag 13. Juli 2017, 15:28

Hallo,

ich habe mal wieder ein kleines Problem.
Ich möchte alle Dateien aus einem Verzeichnis bestehend aus mehreren Ordnern + Unterordnern einlesen.
Hierfür benutze ich 'os.walk'.
Leider liest er aber auch Dateien aus versteckten Ordnern ein z.B.: ".@__thumb"

Hier erst einmal mein Code:

Code: Alles auswählen

# -*- coding: utf-8 -*-
import os
import locale

locale.setlocale(locale.LC_CTYPE, locale.getdefaultlocale())


pfade=['/test1/', '/test2/']

print("Suchlauf gestartet")

i=0
for pfad in pfade:													
	for root, dirs, files in os.walk(pfad):							
	    for name in files:											
		    if name.endswith((".mkv")):		
				datei_pfad = [os.path.join(root, name)]			
				datei_name=name
				i+=1

treffer = str(i)
print("Es wurden " + treffer + " Dateien gefunden")
Jetzt habe ich schon mit 'if ".@__thumb" not in film_pfad:' versucht die versteckten Ordner zu überspringen.
Leider funktioniert dies aber auch nicht.

Code: Alles auswählen

# -*- coding: utf-8 -*-
import os
import locale

locale.setlocale(locale.LC_CTYPE, locale.getdefaultlocale())


pfade=['/test1/', '/test2/']

print("Suchlauf gestartet")

i=0
for pfad in pfade:													
	for root, dirs, files in os.walk(pfad):							
	    for name in files:											
		    if name.endswith((".mkv")):		
				datei_pfad = [os.path.join(root, name)]			
				datei_name=name
				if ".@__thumb" not in datei_pfad:
					i+=1

treffer = str(i)
print("Es wurden " + treffer + " Dateien gefunden")
Hat hier jemand eine Idee warum 'os.walk' überhaupt versteckte Ordner durchsucht, bzw. wie ich die versteckten Ordner auslassen kann.

Vielen Dank im voraus.
Zuletzt geändert von Anonymous am Sonntag 16. Juli 2017, 13:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@mys3lf: ”Versteckte” Ordner werden nur per Konvention von einigen Programmen nicht angezeigt. Ausser das der Dateiname mit einem Punkt beginnt, ist an denen ja sonst nichts anders als an anderen Ordnern. Dementsprechend geht `os.walk()` auch durch solche Ordner.

Das Dein ``if`` nicht funktioniert sollte eigentlich klar sein. Überlege mal was Du da prüfst und wie `datei_pfad` aussehen müsste damit das wahr wäre.

Was Du eigentlich machen möchtest ist diese Pfade aus `dirs` heraus zu filtern und den Inhalt dieser Liste neu zu setzen. Falls Du nicht nur ein Verzeichnis ignorieren möchtest, wie in dem Beispiel in der Python-Dokumentation zu `os.walk()`, dann wäre eine Slice-Zuweisung an die Liste mit einer „list comprehension“ die entsprechend filtert praktisch: ``dirs[:] = [d for d in dirs if True]``. Anstelle des `True` dann die passende Bedingung.
Antworten