从列表中排除最后一个分隔项

时间:2014-04-14 15:41:56

标签: python

我想删除列表中的最后一个字符串,即库名称(由' \'分隔)。我拥有的文本字符串包含编译时使用的库的路径。这些库由空格分隔。我想保留每个路径,但不要直到库名,只有一个根。

示例:

text = " /opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4/crtbeginT.o /opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4/crtfastmath.o /opt/cray/cce/8.2.5/craylibs/x86-64/no_mmap.o /opt/cray/cce/8.2.5/craylibs/x86-64/libcraymath.a /opt/cray/cce/8.2.5/craylibs/x86-64/libcraymp.a /opt/cray/atp/1.7.1/lib/libAtpSigHandler.a /opt/cray/atp/1.7.1/lib/libAtpSigHCommData.a "

我希望我的输出像 -

Output_list =
[/opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4,
/opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4,
/opt/cray/cce/8.2.5/craylibs/x86-64,
/opt/cray/cce/8.2.5/craylibs/x86-64, 
/opt/cray/cce/8.2.5/craylibs/x86-64, 
/opt/cray/atp/1.7.1/lib,
/opt/cray/atp/1.7.1/lib]

最后我想删除output_list中的重复项,以便列表看起来像。

New_output_list =
[/opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4,
/opt/cray/cce/8.2.5/craylibs/x86-64,
/opt/cray/atp/1.7.1/lib]

我使用split()函数获取结果,但我正在努力丢弃路径中的库名。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你似乎想要(不要尝试用路径进行字符串操作,它必然会严重结束):

import os

New_output_List = list(set(os.path.dirname(pt) for pt in text.split()))

os.path.dirname将路径拆分为路径获取目录名称。我们会根据空白区域为textsplit中的每个项目执行此操作list。这是针对系列中的每个项目完成的。 要删除重复项,我们只需将其转换为set,然后最终转换为list

答案 1 :(得分:0)

试试这个

    text = " /opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4/crtbeginT.o /opt/gcc/4.4.4/snos/lib/gcc/x86_64-suse-linux/4.4.4/crtfastmath.o /opt/cray/cce/8.2.5/craylibs/x86-64/no_mmap.o /opt/cray/cce/8.2.5/craylibs/x86-64/libcraymath.a /opt/cray/cce/8.2.5/craylibs/x86-64/libcraymp.a /opt/cray/atp/1.7.1/lib/libAtpSigHandler.a /opt/cray/atp/1.7.1/lib/libAtpSigHCommData.a "
    New_output_List = []
    for x in list(set(text.split(' '))):
        New_output_list.append("".join("/" + y if y else '' for y in x.split("/")[:-1]))