问题描述
试题编号: | 201604-3 |
试题名称: | 路径解析 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包含文件或其他目录。同一个目录下的所有文件和目录的名字各不相同,不同目录下可以有名字相同的文件或目录。 输入格式 第一行包含一个整数 P,表示需要进行正规化操作的路径个数。 输出格式 共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。 样例输入 7 样例输出 /d2/d4/f1 评测用例规模与约定 1 ≤ P ≤ 10。 |
代码
#路径解析
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多遍,又再回去审题看‘评测用例规模与约定’,再提交再找错误,最后发现文件名不能只用字母数字匹配,要求还有.-_