Как я могу точно найти каталог с элементами из текстового файла? - PullRequest
0 голосов
/ 11 февраля 2020

Довольно новый sh до python. Я пытаюсь использовать список из текстового файла для поиска в каталогах файлов и папок. Это работает в определенной степени, но только если элемент поиска находится в начале имени файла / папки, так как я использую .startswith ().

Код, который я использую ниже.

Я думаю, регулярное выражение может быть способом к go, но, похоже, не могу понять это.

Любая помощь приветствуется.

Спасибо.

import os

def data_cleansing(path):

    dirscount = 0
    filescount = 0


    with open("Y:\Admin\Data Cleansing\DCList.txt","r") as f:
        x = f.readlines()
        x = [x.replace("\n","") for x in x]

    #print(x)


    for root, dirs, files in os.walk(path):
        for dirs in dirs:
            if dirs.startswith(tuple(x)):
                dirscount = dirscount + 1
                #print(dirscount)
                print(os.path.join(dirs))



    for root, dirs, files in os.walk(path):
        for files in files:
            if files.startswith(tuple(x)):
                filescount = filescount + 1
                #print(filescount)
                print(os.path.join(files))



    total = (dirscount + filescount)
    print(total,"files and folders found in",path,"that need cleansing.")

data_cleansing(r"G:\Processed\failed")
print("*"*70)
data_cleansing(r"G:\Processed\done")
print("*"*70)
data_cleansing(r"S:\Prosort")
print("*"*70)
data_cleansing(r"S:\Prosort_Archive")

1 Ответ

0 голосов
/ 12 февраля 2020

Это соответствует вашим потребностям?

from os import scandir
find_list = ['Uni', '.doc', 'XML']
path = r"c:\\Autoit\\ForumTests\\"

def scantree(path):
    """Recursively yield DirEntry objects for given directory."""
    for entry in scandir(path):
        if entry.is_dir(follow_symlinks=False):
            yield from scantree(entry.path)
        else:
            yield entry

if __name__ == '__main__':
    for entry in scantree(path):
        for pattern in find_list:
            if pattern in entry.path:
                print(pattern, '-->', entry.path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...