检查字符串是否以驱动器字母开头的Python代码

2 投票
4 回答
3590 浏览
提问于 2025-04-17 21:47

我正在写一个脚本,这个脚本会接收一个文件路径的列表作为输入。我希望这个脚本能确保输入文件中的字符串是有效的完整Windows路径,至少看起来是这样,包含驱动器字母。

那么,确保一个字符串以任意一个字母(不论是大写还是小写)、一个冒号和一个反斜杠开头的最佳方法是什么呢?

我猜正则表达式可能看起来像这样:[a-zA-Z]:\,但是我该如何确保它只检查一个字母,并且这个字母是字符串的前三个字符呢?

谢谢!

4 个回答

0

所以这就是我最后找到的解决办法。

is_path = re.match("^[a-zA-Z]:\\)*", file)
1

这个代码是用来检查给定的路径是否是一个有效的Windows路径。它是根据一些标准来判断的,具体的标准可以在这个链接里找到:http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx。我之前因为找不到合适的代码而自己写了这个。

r'^(?:[a-zA-Z]:\\|\\\\?|\\\\\?\\|\\\\\.\\)?(?:(?!(CLOCK\$(\\|$)|(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9]| )(?:\..*|(\\|$))|.*\.$))(?:(?:(?![><:/"\\\|\?\*])[\x20-\u10FFFF])+\\?))*$'
5

如果你只是想检查一个路径是否以驱动器字母开头,你可以使用内置的 splitdrive 函数:

drive, path = os.path.splitdrive(filename)
if drive == None:
    raise ValueError, 'Filename does not include a drive!'

补充说明:感谢 jme,如果你不是在 Windows 系统上,可以先 import ntpath,然后把第一行替换成这样:

drive, path = ntpath.splitdrive(filename)

注意:从 Python 2.7.8 开始,splitdrive 也会对 UNC 路径返回一个“驱动器”。

6

这个 ^ 符号表示字符串的开头。你现在的字符类只能匹配一个字母,而且你需要对 \ 进行转义。所以你最后的正则表达式应该是:

^[a-zA-Z]:\\

撰写回答