2016-05-04 24 views
0

Anfänger bei Python. Ich versuche, Benutzerordner nach in Ordnern gespeicherten illegalen Inhalten zu durchsuchen. Ich möchte alle Dateien finden, die eines oder mehrere Wörter aus der folgenden Liste enthalten, und außerdem haben die Dateien eine Erweiterung, die aufgeführt wird.Suche nach Dateinamen, die Wörter aus einer Liste enthalten und eine bestimmte Dateierweiterung haben

Ich kann die Dateien mit file.endswith durchsuchen, aber nicht wissen, wie in der Bedingung Wort hinzufügen.

Ich habe durch die Website geschaut und wie nur auf der Suche nach einem bestimmten Wort und nicht einer Liste von Wörtern.

Vielen Dank im Voraus

import os 
L = ['720p','aac','ac3','bdrip','brrip','demonoid','disc','hdtv','dvdrip', 
     'edition','sample','torrent','www','x264','xvid'] 

for root, dirs, files in os.walk("Y:\User Folders\"): 
    for file in files: 

      if file.endswith(('*.7z','.3gp','.alb','.ape','.avi','.cbr','.cbz','.cue','.divx','.epub','.flac', 
           '.flv','.idx','.iso','.m2ts','.m2v','.m3u','.m4a','.m4b','.m4p','.m4v','.md5', 
           '.mkv','.mobi','.mov','.mp3','.mp4','.mpeg','.mpg','.mta','.nfo','.ogg','.ogm', 
           '.pla','.rar','.rm','.rmvb','.sfap0','.sfk','.sfv','.sls','.smfmf','.srt,''.sub', 
           '.torrent','.vob','.wav','.wma','.wmv','.wpl','.zip')): 

        print(os.path.join(root, file)) 
+0

Möchten Sie verbotene Wörter im Dateinamen oder Dateiinhalt erkennen? Ich nehme an, Sie interessieren sich für das Wort im Dateinamen. –

+0

'für Tag in L: wenn Tag in Datei:'? – jDo

+0

@JanVlcinsky Hallo Jan, ja, ich suche nach den verbotenen Wörtern im Dateinamen. – Jason

Antwort

0

Mit py.path.local von py Paket

Das py Paket (installieren $ pip install py) bietet sehr schöne Schnittstelle für die Arbeit mit Dateien.

from py.path import local 


def isbadname(path): 
    bad_extensions = [".pyc", "txt"] 
    bad_names = ["code", "xml"] 
    return (path.ext in bad_extensions) or (path.purebasename in bad_names) 


for path in local(".").visit(isbadname): 
    print(path.strpath) 

Erklärt:

Import

from py.path import local 

py.path.local Funktion ist in der Lage schaffen "objektiviert" Dateinamen. Um meinen Code kurz zu halten, importiere ich es auf diese Weise nur local für die Objektivierung von Dateinamen Strings zu verwenden.

objektivierten Pfad zum lokalen Verzeichnis erstellen:

local(".") 

Erstellt Objekt ist kein String, sondern ein Objekt, das viele interessante Eigenschaften und Methoden hat.

, alle Dateien in einem Verzeichnis Eintrag:

local(".").visit("*.txt") 

gibt einen Generator, alle Pfade zu Dateien Bereitstellung Erweiterung mit ".txt"..

Alternative Methode Dateien zu erkennen, eine Funktion zu erzeugen, liefert, das Argument erhält path (objektiviert Dateiname) und gibt True Wenn die Datei verwendet werden soll, False anderweitig.

Die Funktion isbadname erfüllt genau diesen Zweck.

Wenn Sie für weitere Informationen googlen möchten, verwenden Sie py Pfad lokal (der Name py gibt keine guten Treffer).

mehr für http://pylib.readthedocs.io/en/latest/path.html

Hinweis sehen, dass, wenn Sie pytest Paket verwenden, wird die py mit installiert (für guten Grund - es Namen viel besser lesbar und kürzer Datei bezogenen Tests macht).

+0

Danke, ich werde es jetzt versuchen. Nachdem ich meine Suche abgeschlossen und eine Liste von Dateinamen gesammelt habe, gibt es eine Möglichkeit, sie zu löschen? – Jason

+0

@Jason Sicher, das ist die Schönheit von 'py.path.local'. Haben Sie das Dateiobjekt, tun Sie 'path.remove()'. Überprüfen Sie die Dokumentation, das wird Ihnen gefallen (es gibt mehr Methoden zum Kopieren, Umbenennen, Existieren usw.). –

0

Vielleicht ist es vielleicht besser, eine umgekehrte Suche durchzuführen und eine Warnung über Dateien anzuzeigen, die NICHT mit den gewünschten Dateitypen übereinstimmen.Zum Beispiel könnten Sie das tun:

if file.endswith(".txt", ".py"): 
    print("File is ok!") 
else: 
    print("File is not ok!")