在列表中选择字符串的最后一部分

2024-10-04 11:29:52 发布

您现在位置:Python中文网/ 问答频道 /正文

打印列表时,我有一个具有以下输出的列表:

['/dbfs/mnt/abc/date=20210225/fsp_store_abcxyz_lmn_', '/dbfs/mnt/abc/date=20210225/fsp_store_schu_lev_bsd_s_']

我们的要求是:

fsp_store_abcxyz_lmn_
fsp_store_schu_lev_bsd_s_

你能帮助我如何达到清单上的要求吗


Tags: store列表datebsdabcmntdbfsfsp
2条回答

使用str.rpartition()解决任务的示例。我必须重新实现Max()和LJust()函数,因为您有pyspark,并且它对内置max()str.ljust()有不同的实现

运行我的代码后,您可以在代码中进一步使用res2res3res2包含格式为[source, extracted]的所有行,res3只包含提取的值

Try it online!

def Max(l):
    m = None
    for e in l:
        if m is None or e > m:
            m = e
    return m

def LJust(s, n):
    return s if len(s) >= n else s + ' ' * (n - len(s))

l = [
    '/dbfs/mnt/abc/date=20210225/fsp_store_abcxyz_lmn_',
    '/dbfs/mnt/abc/date=20210225/fsp_store_schu_lev_bsd_s_',
]
res = [e.rpartition('/')[-1] for e in l]
res2 = [[e0, e1] for e0, e1 in zip(l, res)]
maxl = Max([len(e) for e in l])
print('Source'.ljust(maxl) + '    Extracted')
print('\n'.join([LJust(s, maxl) + '    ' + d for s, d in res2]))
res3 = [e1 for e0, e1 in res2]

输出:

Source                                                   Extracted
/dbfs/mnt/abc/date=20210225/fsp_store_abcxyz_lmn_        fsp_store_abcxyz_lmn_
/dbfs/mnt/abc/date=20210225/fsp_store_schu_lev_bsd_s_    fsp_store_schu_lev_bsd_s_

假设列表项是路径:

import os

paths = [
  '/dbfs/mnt/abc/date=20210225/fsp_store_abcxyz_lmn_', 
  '/dbfs/mnt/abc/date=20210225/fsp_store_schu_lev_bsd_s_'
]

for path in paths:
    print(os.path.basename(path))

出去

fsp_store_abcxyz_lmn_
fsp_store_schu_lev_bsd_s_

os.path.basename:https://docs.python.org/3/library/os.path.html#os.path.basename

这个函数非常好,因为您不必指定路径分隔符。[\\/]

相关问题 更多 >