我正在尝试创建一个程序,它接收输入歌曲文件和格式以在文件中写入元标记。以下是一些电话示例:
./parser '%n_-_%t.mp3' 01_-_Respect.mp3
给了我track=01; title=Respect
./parser '%b._%n.%t.mp3' The_Queen_of_Soul._01.Respect.mp3
给了我album=The_Queen_of_Sould; track=01; title=Respect
./parser '%a-%b._%n.%t.mp3' Aretha_Franklin-The_Queen_of_Soul._01.Respect.mp3
给了我artist=Aretha_Franklin; track=01; title=Respect
./parser '%a_-_%b_-_%n_-_%t.mp3' Aretha_Franklin_-_The_Queen_of_Soul_-_01_-_Respect.mp3
给了我artist=Aretha_Franklin; track=01; title=Respect
对于01_-_Respect.mp3
文件的来电,我希望变量包含01
,另一个Respect
。
此处%n
和%t
分别代表歌曲的编号和标题。问题是我不知道如何在bash中(或最终在python中)提取这些信息。
我最大的问题是我事先不知道格式!
注意:有更多信息,例如专辑的%b
,艺术家的%a
等。
答案 0 :(得分:1)
好吧,您可以使用字符串方法split
将字符串拆分为_-_
。
并且从命令行获取输入,您可以使用sys.argv来获取它。
这是一个例子:
import sys
number,title = sys.argv[1].split("_-_")
<强>更新强>
当然,您可以将模式作为第一个参数传递,将文件作为第二个参数传递:
import sys
pattern = sys.argv[1]
number,title = sys.argv[2].split(pattern)
现在,如果您需要更复杂和动态的处理,那么Regex
就是您的获胜卡!
为了写一个好的正则表达式,你必须了解你的数据和你的问题,否则你最终会写一个毛躁的正则表达式
答案 1 :(得分:0)
你可以详细说明这一点。不过,这是一个非常简单的例子。
Pagination
输出
import re
p = re.compile('([0-1][0-1])_\-_(.*)\.mp3')
title = '01_-_Respect.mp3'
p.findall(title)
我使用此page来使用正则表达式。
<强>更新强>
由于格式已经给出,请使用字符串切片。好的,非常局限于特定情况..
[('01', 'Respect')]
答案 2 :(得分:0)
尝试此代码:
(考虑在运行时给出参数)
tmp=$1
num=echo ${tmp%%_*}
title=echo ${tmp##*_}|cut -d. -f1
变量num和title将存储参数
中的部分