我正在尋找一個特定的目錄(/ android)。步行目錄
我知道在python中,我可以使用os.walk(root_dir)來遍歷目錄,但是這裏的問題是我不知道我要查找的目錄是root_dir的子目錄還是其父目錄ROOT_DIR。
是否有任何方法可以執行與os.walk()相同的操作,但方式相反?
謝謝。
我正在尋找一個特定的目錄(/ android)。步行目錄
我知道在python中,我可以使用os.walk(root_dir)來遍歷目錄,但是這裏的問題是我不知道我要查找的目錄是root_dir的子目錄還是其父目錄ROOT_DIR。
是否有任何方法可以執行與os.walk()相同的操作,但方式相反?
謝謝。
您可以使用..
在os.path.abspath()
轉到root_dir
的父目錄。
import os
parent_dir = os.path.abspath(os.path.join(root_dir, ".."))
現在你有root_dir
parent_directory
在parent_dir
,你可以把它root_dir
和再次使用os.walk(root_dir)
。
這增加了很多複雜的代碼如果我正在處理很多目錄,我會在每次嘗試走遍所有的樹,如果我沒有找到我要找的目錄我只是在目錄樹中向上又走路了?沒有更好的解決方案嗎? –
@LastBerserkr你有字面上*不知道*這個目錄可能是什麼? – jonrsharpe
然後,不要使用'os.walk()'使用'os.listdir(root_dir)',它會給出'root_dir'中所有目錄的列表,並且你可以遍歷它們以發現是否必須進入一些目錄或多走一級。 – shaktimaan
下面是我選擇的解決方案,但是在解析複製文件的絕對路徑時出現錯誤。 我得到這個錯誤,我認爲這是因爲我需要絕對路徑,有人知道如何從目錄列表中獲取絕對路徑嗎?
FileNotFoundError: [Errno 2] No such file or directory: 'android\\MyCustomClass.smali'
這裏是我的代碼:
def copy_my_custom_class(current_dir):
subdirs = os.listdir(current_dir)
for subdir in subdirs:
if (subdir == 'android'):
my_custom_class_path = os.path.join(subdir, 'MyCustomClass.smali')
shutil.copyfile('./files/MyCustomClass.smali', my_custom_class_path)
copy_my_custom_class(os.chdir(current_dir))
這裏你只是加入'subdir'路徑(即'android')到文件。所以你試圖將文件從'source'複製到''android \\ MyCustomClass.smali'''。你必須得到文件實際存在的絕對路徑。如果current_dir是當前工作目錄,則使用'os.path.join(os.getcwd(),subdir,'MyCustomClass.smali')'。 – shaktimaan
@shaktimaan問題是,它不是目前的工作目錄,所以我想沒有什麼可做的,對吧? –
對不起,延遲迴復..但是你的問題真的解決了嗎?如果沒有,那麼我會建議有一個變量保持跟蹤文件的絕對路徑。並使用'os.path。如果你正在進入某個目錄,並且加入了(yourabspath,subdir)',如果你正在向某個目錄移動,則加入'os.path.join(yourabspath,「..」)。但是,當然你必須保留訪問文件的絕對路徑。 – shaktimaan
我解決了這個問題,此代碼:
def copy_my_custom_class(current_dir):
subdirs = os.listdir(current_dir)
for subdir in subdirs:
if (subdir == 'android'):
dest_file_path = os.path.join(current_dir, subdir, 'MyCustomClass.smali')
shutil.copyfile('./files/MyCustomClass.smali', dest_file_path)
return 0
copy_my_custom_class(os.path.dirname(current_dir))
可以向上使用'os.chdir(」改變當前的工作目錄.. ')',以及其他選項。 –