在这种情况下,如何查找文件的基本名称?
>>> from os.path import basename
>>> basename('C:\\test.exe --help')
'test.exe --help'
结果应该是test.exe
而不是--help
或任何其他参数。
答案 0 :(得分:1)
有shlex
模块模仿 Unix shell的行为(但由于command.com曾经模仿它的一些功能,它也应该工作)。它也会容忍引号(但请注意我在示例中使用了原始字符串):
>>> import shlex
>>> print shlex.split(r'C:\\test.exe --help')
['C:\\test.exe', '--help']
>>> print shlex.split(r'"C:\\test.exe" --help')
['C:\\test.exe', '--help']
>>> print shlex.split(r'"C:\\Program Files\\test.exe" --help')
['C:\\Program Files\\test.exe', '--help']
所以从shlex.split
返回第一个字符串,并传递给basename。
如果你想摆脱将反斜杠\
视为转义序列,你应该明确地构造shlex
对象:
>>> from shlex import shlex
>>> lex = shlex('C:\\test.exe --help')
>>> lex.whitespace_split = True
>>> lex.escape = ''
>>> list(lex)
['C:\\test.exe', '--help']
答案 1 :(得分:0)
import os, shlex
print(os.path.basename(shlex.split(r'"C:\\test.exe" --help')[0]))
答案 2 :(得分:0)
问题是,至少在Linux上,'test.exe --exe'是一个有效的文件名。所以这就是为什么python不试图从'parameters'中清除文件名的原因。我查看了windows docs,看起来你也发了一个名为'test.exe --exe'的文件。所以,这实际上取决于你想要实现的目标。
另请看一下:What is the most correct regular expression for a UNIX file path?
然后您应该检查文件是否存在,如果不存在则使用正则表达式或shlex模块去除参数......