想象一下,我有以下内容:
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]
有没有机会简化只用一个表达式做同样工作的事情?
答案 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.basename和os.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]
答案 4 :(得分:0)
我很确定一些Regex-Ninja *会给你一个或多或少的理智方式(或者我现在看到其他人发布了:在一行上写两个表达式的方法......)
但我想知道你为什么要用一个表达式拆分它? 对于这样一个简单的拆分,做两个可能比创建一些高级的或逻辑更快。如果你拆分两次也更安全:
我想你要分开路径,文件名和文件扩展名,如果先拆分'/'你知道文件名应该在最后一个数组索引中,那么你可以尝试拆分最后一个索引看看你是否能找到文件扩展名。那么你不需要关心路径名中是否有点。
*(正常表达式的任何理智用户不应该被冒犯。;)