python ccf題解 201604-3 路徑解析
問題描述
試題編號: | 201604-3 |
試題名稱: | 路徑解析 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄(或者資料夾)和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同一個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。 為了指定檔案系統中的某個檔案,需要用路徑來定位。在類 Unix 系統(Linux、Max OS X、FreeBSD等)中,路徑由若干部分 輸入格式 第一行包含一個整數 P,表示需要進行正規化操作的路徑個數。 第二行包含一個字串,表示當前目錄。 以下 P 行,每行包含一個字串,表示需要進行正規化操作的路徑。 輸出格式 共 P 行,每行一個字串,表示經過正規化操作後的路徑,順序與輸入對應。 樣例輸入 7 /d2/d3 /d2/d4/f1 ../d4/f1 /d1/./f1 /d1///f1 /d1/ /// /d1/../../d2 樣例輸出 /d2/d4/f1 /d2/d4/f1 /d1/f1 /d1/f1 /d1 / /d2 評測用例規模與約定 1 ≤ P ≤ 10。 檔案和目錄的名字只包含大小寫字母、數字和小數點 .、減號 - 以及下劃線 _。 不會有檔案或目錄的名字是 . 或 .. ,它們具有題目描述中給出的特殊含義。 輸入的所有路徑每個長度不超過 1000 個字元。 輸入的當前目錄保證是一個經過正規化操作後的路徑。 對於前 30% 的測試用例,需要正規化的路徑的組成部分不包含 . 和 .. 。 對於前 60% 的測試用例,需要正規化的路徑都是絕對路徑。 |
程式碼
#路徑解析
import re #引入正則表示式包
n = int(input())
pwd = input()#當前目錄
for i in range(n):
route = input()
#re.match()匹配字串開頭
if(re.match("/",route) == None):#相對路徑和空字串
route = pwd +'/'+ route
route += ("/") #結尾加‘/’方便替換,(必須在處理完空串後再加‘/’ ,空串10分)
#re.sub()替換
route = re.sub(r"//+","/",route)#刪去多個‘/’
#處理[.]
route = re.sub(r"(/[.])+/","/",route)#[.]表示.不轉義
#處理[..]
#re.search()搜尋
while(re.search(r"/[.]{2}/",route)):
route = re.sub(r"^(/[.]{2})+/","/",route)#最開頭根目錄的上一級還是‘/’,^匹配開頭
if("/../" in route):#檔名不能只用字母數字匹配,要求還有.-_ (10分-20分)
p = route.index("/../")
x = route.rindex("/",0,p)#從0到p範圍找,找‘/../’前面的一個‘/’索引也就是上級目錄
route = route[0:x]+route[p+3:]#去掉‘/上級目錄/../’
while(len(route)>1 and route[-1]=="/"):#去除結尾‘/’
route = route[:-1]
print(route)
#上面的問題折磨了我好久,不知道問題應該從哪找,提交了N多遍,又再回去審題看‘評測用例規模與約定’,再提交再找錯誤,最後發現檔名不能只用字母數字匹配,要求還有.-_