Python os.path.basename,strip参数

时间:2015-05-29 08:57:41

标签: python python-3.x filepath os.path

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

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

结果应该是test.exe而不是--help或任何其他参数。

3 个答案:

答案 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模块去除参数......