检查字符串是否以驱动器字母开头的Python代码
我正在写一个脚本,这个脚本会接收一个文件路径的列表作为输入。我希望这个脚本能确保输入文件中的字符串是有效的完整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]:\\