第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用Python方式查找最接近特定目錄位置的具有給定名稱的文件

用Python方式查找最接近特定目錄位置的具有給定名稱的文件

蕪湖不蕪 2021-03-29 11:09:54
我目前在一個(gè)項(xiàng)目中,我實(shí)際上是在嘗試基于一些分散的xml文件創(chuàng)建樹結(jié)構(gòu),可惜的是,這些文件不是很一致地組織在一起。具體來說,我現(xiàn)在要說的是,給定許多具有給定文件擴(kuò)展名的文件,我希望能夠找到指示其布局的xml文檔。幸運(yùn)的是,文檔始終具有相同的名稱,但是遺憾的是,相對(duì)于我嘗試鏈接到的媒體文件,文檔并不總是位于相同的位置。我發(fā)現(xiàn)的最明智的解決方法是在目錄結(jié)構(gòu)中查找具有相似名稱的最近文件。但是,我設(shè)法在Python中完成此操作的唯一方法是通過轉(zhuǎn)到目錄并使用os.walk查找要考慮的文件??杀氖?這非常慢,我希望能夠?qū)Υ罅棵襟w文件執(zhí)行此操作,因此我正在尋找更優(yōu)雅的解決方案。下面是一些示例代碼,顯示了我目前的方法:from os import listdirfrom os.path import isfile, join, realpathcurrent_directory = "/path/to/example.mp3"all_files = lambda path: [file for file in listdir(path) if isfile(join(path,file))]filename = "test.xml"found = Falsewhile found is False:    current_directory = current_directory[:current_directory.rfind("/")]    current_files = all_files(current_directory)    if filename in current_files:        return current_files[current_files.index(filename)]目錄結(jié)構(gòu)還不錯(cuò),上面的方法可以一次到達(dá)兩個(gè)文件實(shí)例,但是我仍然覺得上面的方法不是很pythonic,而且比實(shí)際需要的要復(fù)雜得多。有任何想法嗎?
查看完整描述

1 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

您的代碼中沒有遞歸樹搜索,因此實(shí)際上不需要os.walk()。如果我理解正確,您的代碼將檢查當(dāng)前目錄的確切名稱,然后一直向上搜索FS。


path = os.path.dirname("/path/to/file.mp3")

target = "test.xml"

top = "/"

while True:

    if os.path.isfile(os.path.join(path,target)):

        #found

        break

    if path==top:   #alternative check for root dir: if os.path.dirname(path)==path

        #not found

        break    

    path=os.path.dirname(path)

一種替代方法是使用生成父目錄的生成器,但對(duì)我而言似乎過于復(fù)雜。盡管這可能更像pythonic:


def walk_up(path,top):

    while True:

        yield path

        if path==top: raise StopIteration

        else: path=os.path.dirname(path)


found = None

for p in walk_up(os.path.dirname("/path/to/file.mp3"),"/"):

   p = os.path.join(p,target)

   if os.path.isfile(p):

      #found

      found = p

      break

else:

    #not found


查看完整回答
反對(duì) 回復(fù) 2021-04-02
  • 1 回答
  • 0 關(guān)注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)