从用户inpu中以一种格式提取一行文本中的信息

2024-03-29 06:46:01 发布

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

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

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


Tags: 文件oftheparsertitleartist格式track
3条回答

你可以详细说明一下。不过,这是一个非常简单的例子

import re
p = re.compile('([0-1][0-1])_\-_(.*)\.mp3')
title = '01_-_Respect.mp3'
p.findall(title)

输出 [('01', 'Respect')]

我用这个page来玩regex

更新

既然给出了格式,就使用字符串切片。好吧,仅限于具体情况

number = title[:title.find('_')]
>>> number
'01'
>>> track = title[len(number) + 3:len(title)-4]
>>> track
'Respect'

请尝试以下代码:

(考虑到参数是在运行时给出的)

tmp=$1
num=echo ${tmp%%_*}
title=echo ${tmp##*_}|cut -d. -f1

变量num和title将存储参数中的部分

嗯,您可以使用string方法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就是您的赢家

为了编写一个好的正则表达式,你必须理解你的数据和你的问题,否则你最终会编写一个有问题的正则表达式

相关问题 更多 >