从我的lis中排除最后一个分隔的项

2024-05-15 22:16:40 发布

您现在位置: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]

最后,我想删除输出列表中的重复项,使列表看起来像。你知道吗

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()函数得到结果,但是我很难从路径中丢弃库名称。你知道吗

任何帮助都将不胜感激。你知道吗


Tags: 字符串路径名称列表linuxlibx86gcc
2条回答

试试这个

    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]))

您似乎想要(不要尝试对路径执行字符串操作,它肯定会以糟糕的方式结束):

import os

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

^{}将一条路径拆分为一条路径,并从路径中获取目录名。我们对textsplit中的每一项都执行此操作,并将其转换为基于空格的list。这个系列的每一项都是这样做的。 要删除重复项,我们只需将其转换为set,然后最终转换为list。你知道吗

相关问题 更多 >