使用用户输入的格式提取文本行中的信息

时间:2018-01-23 12:09:44

标签: python bash format

我正在尝试创建一个程序,它接收输入歌曲文件和格式以在文件中写入元标记。以下是一些电话示例:

  • ./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等。

3 个答案:

答案 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将存储参数

中的部分