Поиск всех файлов с одинаковыми именами в каталоге python - PullRequest
2 голосов
/ 08 июля 2019

У меня есть вопрос: мне нужно получить пути к файлу в каталоге, у меня есть папка, содержащая другие папки, другие папки и т. Д. .... и каждая из них содержит нужный мне файл "tv.sas7bdat"чтобы получить каждый путь к этому файлу.Спасибо !!!

Ответы [ 5 ]

2 голосов
/ 08 июля 2019

Вы можете попробовать следующий код, где PATH обозначает родительский каталог

import os
def getAlldirInDiGui(path,resultList):
    filesList=os.listdir(path)
    for fileName in filesList:
        fileAbpath=os.path.join(path,fileName)
        if os.path.isdir(fileAbpath):
            getAlldirInDiGui(fileAbpath,resultList)
        else:
            if fileName=='tv.sas7bdat':
                resultList.append(fileAbpath)
resultList = []
PATH = ""
getAlldirInDiGui(PATH,resultList)
1 голос
/ 08 июля 2019

Вы можете использовать os.walk()

import os

for root, dirs, files in os.walk(os.getcwd()):
    for f in files:
        if f.find("tv.sas7bdat")>=0:
            print(root,f)
1 голос
/ 08 июля 2019

Вы можете использовать пакет os python в сочетании с рекурсивной функцией для поиска в определенном каталоге

import os
from os.path import isfile, join, isdir

def get_files_path(directory, paths):
    for item in os.listdir(directory):
        if isfile(join(directory, item)) and item == "tv.sas7bda":
            paths.append(directory + item)
        elif isdir(directory+item):
            get_files_path(directory + item, paths)
    return paths

directory_to_search = "./"
get_files_path(directory_to_search , [])
1 голос
/ 08 июля 2019

Надеюсь, что приведенный ниже код должен работать на вас:

import glob
initial_path = "c:\<intital folder location>"
files = [file for file in glob.glob(initial_path+ "tv.sas7bdat" , recursive=True)]
for f in files:
    print(f)
1 голос
/ 08 июля 2019

Если я правильно понял вашу проблему, вы можете достичь своей цели с помощью функции Pythons os.walk , например:

import os
for root, dirs, files in os.walk("<starting folder here>", topdown=False):
    for name in files:
        if name == "tv.sas7bdat":
            print(os.path.join(root, name))

ps: что касается комментариев в вашем вопросе, в следующий разПожалуйста, предоставьте как можно больше подробностей в вашем вопросе и укажите код вашей попытки, см. Правила обращения

...