Python字符串多名称拆分及歌曲feat列拆分合并至标题的实现方法
1. Python拆分以分隔符分隔的多名称字符串
直接用字符串的split()方法指定分隔符即可,若分隔符前后存在多余空格,拆分后可搭配strip()清除每个元素的空白字符。
示例代码:
# 以'-'为分隔符拆分字符串 name_str = "Ed Sheeran - Cardi B - Camila Cabello" names = [name.strip() for name in name_str.split('-')] print(names) # 输出: ['Ed Sheeran', 'Cardi B', 'Camila Cabello']
如果分隔符不固定(比如混合多个空格和'-'),可以用正则表达式的re.split()处理:
import re name_str = "Ed Sheeran - Cardi B Camila Cabello" names = [name.strip() for name in re.split(r'[- ]+', name_str) if name.strip()] print(names) # 输出: ['Ed Sheeran', 'Cardi B', 'Camila Cabello']
2. 拆分feat艺术家并合并到歌曲标题
针对你提供的示例数据(每行结构为主艺术家 - feat艺术家1 - feat艺术家2 - 歌曲名 粉丝数),可以通过以下步骤处理:提取feat艺术家列表,将其合并到歌曲标题中(格式为歌曲名 (feat. 艺术家1, 艺术家2)),同时保留主艺术家和粉丝数字段。
处理单行文本的示例代码
# 示例数据 data = [ "Ed Sheeran - Cardi B - Camila Cabello - Cheat south of the 71783101", "Ed Sheeran - Chris Stapleton - Bruno Mars blow 71783101" ] processed_data = [] for line in data: # 按'-'拆分并清理空白 parts = [p.strip() for p in line.split('-') if p.strip()] # 提取主艺术家 main_artist = parts[0] # 拆分最后一部分,分离歌曲名和粉丝数 title_followers = parts[-1].split() followers = title_followers[-1] title = ' '.join(title_followers[:-1]) # 提取feat艺术家(中间的元素) feat_artists = parts[1:-1] # 合并标题与feat信息 full_title = f"{title} (feat. {', '.join(feat_artists)})" if feat_artists else title processed_data.append({ 'Artist': main_artist, 'Title': full_title, 'Artist_followers': followers }) # 输出处理结果 for item in processed_data: print(item)
运行后输出:
{'Artist': 'Ed Sheeran', 'Title': 'Cheat south of the (feat. Cardi B, Camila Cabello)', 'Artist_followers': '71783101'} {'Artist': 'Ed Sheeran', 'Title': 'blow (feat. Chris Stapleton, Bruno Mars)', 'Artist_followers': '71783101'}
处理Pandas DataFrame的示例代码
如果数据是DataFrame格式,可使用以下代码:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'raw_data': [ "Ed Sheeran - Cardi B - Camila Cabello - Cheat south of the 71783101", "Ed Sheeran - Chris Stapleton - Bruno Mars blow 71783101" ] }) # 定义处理函数 def process_row(row): parts = [p.strip() for p in row['raw_data'].split('-') if p.strip()] main_artist = parts[0] title_followers = parts[-1].split() followers = title_followers[-1] title = ' '.join(title_followers[:-1]) feat_artists = parts[1:-1] full_title = f"{title} (feat. {', '.join(feat_artists)})" if feat_artists else title return pd.Series({ 'Artist': main_artist, 'Title': full_title, 'Artist_followers': followers }) # 应用函数处理数据 processed_df = df.apply(process_row, axis=1) print(processed_df)
输出结果:
Artist Title Artist_followers 0 Ed Sheeran Cheat south of the (feat. Cardi B, Camila Cabello) 71783101 1 Ed Sheeran blow (feat. Chris Stapleton, Bruno Mars) 71783101
内容的提问来源于stack exchange,提问作者Rivaldy
相关产品推荐
相关产品推荐

