Python os.path.basename, 剥离参数

Python os.path.basename, strip parameters

在这种情况下如何找出文件的基本名称?

>>> from os.path import basename
>>> basename('C:\test.exe --help')
'test.exe --help'

结果应该只是 test.exe,没有 --help 或任何其他参数。

import os, shlex
print(os.path.basename(shlex.split(r'"C:\test.exe" --help')[0]))

有一个 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']

问题是,至少在 Linux 上,'test.exe --exe' 是一个有效的文件名。所以这就是 python 不尝试从 'parameters' 中清除文件名的原因。我查看了 windows docs,看起来您还制作了名为 'test.exe --exe' 的文件。因此,这实际上取决于您要实现的目标。

也看看这个:What is the most correct regular expression for a UNIX file path?

然后您可能应该检查文件是否存在,如果不存在则使用正则表达式或 shlex 模块去除参数...