在同一个表达式中拆分两次?

时间:2008-11-27 16:12:04

标签: python

想象一下,我有以下内容:

inFile = "/adda/adas/sdas/hello.txt"

# that instruction give me hello.txt
Name = inFile.name.split("/") [-1]

# that one give me the name I want - just hello
Name1 = Name.split(".") [0]

有没有机会简化只用一个表达式做同样工作的事情?

5 个答案:

答案 0 :(得分:20)

您可以使用os.path.basename获取路径的最后一部分,然后使用os.path.splitext获取不带扩展名的文件名,从而独立获得您想要的平台。

from os.path import basename, splitext

pathname = "/adda/adas/sdas/hello.txt"
name, extension = splitext(basename(pathname))
print name # --> "hello"

使用os.path.basenameos.path.splitext代替str.split,或者re.split更合适(因此获得的分数比任何其他答案都多)因为它不会在其他{{3 }}

它也带有大多数要点,因为它准确地回答了你对“一行”的问题,并且在美学上比你的例子更令人愉悦(尽管这是有争议的,因为所有的品味问题)

答案 1 :(得分:2)

回答主题中的问题,而不是试图分析示例......

如果你想分割路径,你真的想要使用Florians解决方案,但如果你保证不使用它来进行路径解析......

您可以使用re.split()使用多个分隔符进行拆分,或者使用“|”进行拆分,看一下:

import re
inFile = "/adda/adas/sdas/hello.txt"
print re.split('\.|/', inFile)[-2]

答案 2 :(得分:1)

>>> inFile = "/adda/adas/sdas/hello.txt"
>>> inFile.split('/')[-1]
'hello.txt'
>>> inFile.split('/')[-1].split('.')[0]
'hello'

答案 3 :(得分:1)

如果它总是像上面这样的路径你可以使用os.path.split和os.path.splitext

以下示例将仅打印hello

from os.path import split, splitext
path = "/adda/adas/sdas/hello.txt"
print splitext(split(path)[1])[0]

有关详细信息,请参阅https://docs.python.org/library/os.path.html

答案 4 :(得分:0)

我很确定一些Regex-Ninja *会给你一个或多或少的理智方式(或者我现在看到其他人发布了:在一行上写两个表达式的方法......)

但我想知道你为什么要用一个表达式拆分它? 对于这样一个简单的拆分,做两个可能比创建一些高级的或逻辑更快。如果你拆分两次也更安全:

我想你要分开路径,文件名和文件扩展名,如果先拆分'/'你知道文件名应该在最后一个数组索引中,那么你可以尝试拆分最后一个索引看看你是否能找到文件扩展名。那么你不需要关心路径名中是否有点。

*(正常表达式的任何理智用户不应该被冒犯。;)