判断输入的文件夹路径是否合法,是否包含非法字符
def verify_dir_path(path):
"""
判断输入的文件夹路径是否合法,是否包含非法字符
@param path: 绝对路径
@return:
"""
print(f"判断路径:{path}")
# 将路径中连续的 \ 和 / 替换为一个 \
path = re.sub(r'[\\/]+', r'\\', path)
# 判断是否为盘符根目录
ret = re.match(r'^[a-zA-Z]:[\\/]*?$', path)
print(f"1.判断是否为盘符根目录:{path}")
if ret:
return True, path
# 判断是否为绝对路径
print(f"2.判断是否为绝对路径:{path}")
if not os.path.isabs(path):
return False, "路径不是绝对路径"
# 分离出盘符并判断盘符是否存在
drive, rest = os.path.splitdrive(path)
print(f"3.判断盘符是否存在:{path}")
if not os.path.isdir(drive):
return False, "盘符不存在"
# 判断路径是否包含非法字符
ret = re.findall(r'[:*?"<>|]', rest)
print(f"4.判断路径是否包含非法字符:{path}")
if not ret:
return True, path
else:
return False, "路径包含非法字符", ret
测试:
if __name__ == '__main__':
t_dir = r'e:\\aaa\\\\\\\lll\\lllkk\\//'
print(verify_dir_path(t_dir))
t_dir2 = r'e:'
print(verify_dir_path(t_dir2))
t_dir3 = r'e:\?:">s\s*'
print(verify_dir_path(t_dir3))
输出:
"""
判断路径:e:\\aaa\\\\\\\lll\\lllkk\\//
1.判断是否为盘符根目录:e:\aaa\lll\lllkk\
2.判断是否为绝对路径:e:\aaa\lll\lllkk\
3.判断盘符是否存在:e:\aaa\lll\lllkk\
4.判断路径是否包含非法字符:e:\aaa\lll\lllkk\
(True, 'e:\\aaa\\lll\\lllkk\\')
判断路径:e:
1.判断是否为盘符根目录:e:
(True, 'e:')
判断路径:e:\?:">s\s*
1.判断是否为盘符根目录:e:\?:">s\s*
2.判断是否为绝对路径:e:\?:">s\s*
3.判断盘符是否存在:e:\?:">s\s*
4.判断路径是否包含非法字符:e:\?:">s\s*
(False, '路径包含非法字符', ['?', ':', '"', '>', '*'])
"""