lrc歌词格式转化为txt格式

Python/PHP/Perl 开发与设计
头像
sanjinxiong
帖子: 39
注册时间: 2011-04-25 9:46
送出感谢: 0
接收感谢: 0

lrc歌词格式转化为txt格式

#1

帖子 sanjinxiong » 2011-04-29 18:19

因为有时候要贴歌词,而手头又只要lrc的文件,lrc文件中的每一句歌词前面都有时间点,我想把每一句前面的时间点去掉

因为之前没接触过python

大概思路应该不难,读取lrc文件后通过正则表达式将每一句前面的时间点去掉,然后再写入另外的文件

首先,我不去掉时间点看看是不是会出错。代码如下:

代码: 全选

infile = open("1111.lrc","r")
file_content = infile.read();
infile.seek(0);
file_content_list = infile.readlines();
outfile = open("2222.txt","w")
file_content_list = [line+'\n' for line in file_content_list]
outfile.writelines(file_content_list)

outfile.close()
infile.close()

这样完了以后2222.txt文件会出现乱码

由于扩展名.lrc无法上传,我就把后缀名改成了.txt的上传了
附件
1111.txt
歌词文件
(1.09 KiB) 下载 53 次
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: lrc歌词格式转化为txt格式

#2

帖子 eexpress » 2011-04-29 18:26

难道不是sed正则处理的事情。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: lrc歌词格式转化为txt格式

#3

帖子 lilydjwg » 2011-04-29 21:01

我这里试过,没有乱码,只是每两行之间多了个换行。
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39
送出感谢: 0
接收感谢: 4 次

Re: lrc歌词格式转化为txt格式

#4

帖子 ChenFengyuan » 2011-04-30 16:23

eexpress 写了:难道不是sed正则处理的事情。
这明显就是perl该干的事情 :em11
$ cat a-bak
[ti:一生有你(MIX)]
[ar:水木年华]
[al:跳舞专辑]
[by:jinshukuangren]
[00:13.27]一生有你(MIX)
[00:23.27]作词:卢庚戌
[00:33.27]作曲:卢庚戌
[00:43.27]MIX:王志
[00:53.27]主唱:卢庚戌
[01:03.27]专辑:跳舞专辑
[01:13.27]LRC制作:jinshukuangren
[01:23.27]
[01:34.01]因为梦见你离开
[01:37.57]我从哭泣中醒来
保存成a.lrc

代码: 全选

$ perl -i-bak -pne 'if(/\[[^\d]/){s/^\[//;s/\]$//;}else{s/^\[[^\]]+]//}' a.lrc

代码: 全选

$ cat a.lrc
ti:一生有你(MIX)
ar:水木年华
al:跳舞专辑
by:jinshukuangren
一生有你(MIX)
作词:卢庚戌
作曲:卢庚戌
MIX:王志
主唱:卢庚戌
专辑:跳舞专辑
LRC制作:jinshukuangren

因为梦见你离开
我从哭泣中醒来
看就一句话.顺便说一下.这样是有悲愤的.有个-bak文件.是原文件备份的.如果你不要去掉-i-bak.或者处理完以后.觉得没问题.用find删除好了
用什么语言做啥事情. :em09
头像
sanjinxiong
帖子: 39
注册时间: 2011-04-25 9:46
送出感谢: 0
接收感谢: 0

Re: lrc歌词格式转化为txt格式

#5

帖子 sanjinxiong » 2011-05-03 11:27

lilydjwg 写了:我这里试过,没有乱码,只是每两行之间多了个换行。
后来我用gedit再打开转换后的文件,确实没有乱码,我想可能是vim编码设置的问题
打开vim的配置文件

代码: 全选

vi /home/.vimrc
然后增加如下配置

代码: 全选

set fileencodings=utf-8,gbk,ucs-bom,cp936 
再次打开转换后的文件,问题解决
头像
sanjinxiong
帖子: 39
注册时间: 2011-04-25 9:46
送出感谢: 0
接收感谢: 0

Re: lrc歌词格式转化为txt格式

#6

帖子 sanjinxiong » 2011-05-03 11:28

ChenFengyuan 写了:
eexpress 写了:难道不是sed正则处理的事情。
这明显就是perl该干的事情 :em11
$ cat a-bak
[ti:一生有你(MIX)]
[ar:水木年华]
[al:跳舞专辑]
[by:jinshukuangren]
[00:13.27]一生有你(MIX)
[00:23.27]作词:卢庚戌
[00:33.27]作曲:卢庚戌
[00:43.27]MIX:王志
[00:53.27]主唱:卢庚戌
[01:03.27]专辑:跳舞专辑
[01:13.27]LRC制作:jinshukuangren
[01:23.27]
[01:34.01]因为梦见你离开
[01:37.57]我从哭泣中醒来
保存成a.lrc

代码: 全选

$ perl -i-bak -pne 'if(/\[[^\d]/){s/^\[//;s/\]$//;}else{s/^\[[^\]]+]//}' a.lrc

代码: 全选

$ cat a.lrc
ti:一生有你(MIX)
ar:水木年华
al:跳舞专辑
by:jinshukuangren
一生有你(MIX)
作词:卢庚戌
作曲:卢庚戌
MIX:王志
主唱:卢庚戌
专辑:跳舞专辑
LRC制作:jinshukuangren

因为梦见你离开
我从哭泣中醒来
看就一句话.顺便说一下.这样是有悲愤的.有个-bak文件.是原文件备份的.如果你不要去掉-i-bak.或者处理完以后.觉得没问题.用find删除好了
用什么语言做啥事情. :em09

多谢提供perl的方法,呵呵。还没有学过perl
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: lrc歌词格式转化为txt格式

#7

帖子 lilydjwg » 2011-05-03 13:01

sanjinxiong 写了: 然后增加如下配置

代码: 全选

set fileencodings=utf-8,gbk,ucs-bom,cp936 
再次打开转换后的文件,问题解决
ucs-bom 应该放第一,gbk 和 cp936 基本等同。
头像
acer4740
帖子: 1405
注册时间: 2010-09-13 19:04
来自: 0xFF00EE
送出感谢: 1 次
接收感谢: 3 次

Re: lrc歌词格式转化为txt格式

#8

帖子 acer4740 » 2011-05-03 13:14

怎么没有人用sed,他才是干这个的
头像
acer4740
帖子: 1405
注册时间: 2010-09-13 19:04
来自: 0xFF00EE
送出感谢: 1 次
接收感谢: 3 次

Re: lrc歌词格式转化为txt格式

#9

帖子 acer4740 » 2011-05-03 13:24

代码: 全选

sed 's/\[[0-9].*\]//' file.lrc
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: lrc歌词格式转化为txt格式

#10

帖子 lilydjwg » 2011-05-03 13:25

acer4740 写了:怎么没有人用sed,他才是干这个的
eexpress 很早就说了呀
头像
nmsfan
帖子: 18958
注册时间: 2009-10-16 22:46
来自: finland
送出感谢: 16 次
接收感谢: 36 次

Re: lrc歌词格式转化为txt格式

#11

帖子 nmsfan » 2011-05-03 14:14

膜拜大神们
>>>>推Ubuntu 桌面培训~~<<<<
>>>>想加入/了解gimp汉化吗,点我吧~<<<<
——————————————————————
不推荐wubi,也不推荐你给别人推荐wubi…………
随心而为的感觉真好……
强推mayhem!!
强推ensiferum
头像
sanjinxiong
帖子: 39
注册时间: 2011-04-25 9:46
送出感谢: 0
接收感谢: 0

Re: lrc歌词格式转化为txt格式

#12

帖子 sanjinxiong » 2011-05-03 15:38

lilydjwg 写了:
sanjinxiong 写了: 然后增加如下配置

代码: 全选

set fileencodings=utf-8,gbk,ucs-bom,cp936 
再次打开转换后的文件,问题解决
ucs-bom 应该放第一,gbk 和 cp936 基本等同。
为什么捏,多谢提醒哈
头像
sanjinxiong
帖子: 39
注册时间: 2011-04-25 9:46
送出感谢: 0
接收感谢: 0

Re: lrc歌词格式转化为txt格式

#13

帖子 sanjinxiong » 2011-05-03 15:40

acer4740 写了:

代码: 全选

sed 's/\[[0-9].*\]//' file.lrc
sed还没学过呢,不过谢谢你写出sed的方法
头像
sanjinxiong
帖子: 39
注册时间: 2011-04-25 9:46
送出感谢: 0
接收感谢: 0

Re: lrc歌词格式转化为txt格式

#14

帖子 sanjinxiong » 2011-05-03 16:17

用python搞出来了,其实挺简单的。
我的代码如下:
如果有更好的方法,还请别吝啬贴出来哈

代码: 全选

import re

infile = open("1111.txt")
file_content = infile.read()
infile.seek(0)

file_content_list = infile.readlines()

outfile = open("2222.txt","w")

for line in file_content_list:
    reobj = re.compile(r"\[\d\d+:\d\d\.\d\d\]")
    line = reobj.sub("",line)
    outfile.write(line)

infile.close()
outfile.close()
转换前后见附件
附件
2222.txt
转换后结果
(738 Bytes) 下载 34 次
1111.txt
lrc歌词
(1.09 KiB) 下载 22 次
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: lrc歌词格式转化为txt格式

#15

帖子 lilydjwg » 2011-05-03 17:20

sanjinxiong 写了:用python搞出来了,其实挺简单的。
我的代码如下:
如果有更好的方法,还请别吝啬贴出来哈
[python]
with open("1111.txt") as infile, open("2222.txt","w") as outfile:
for line in infile:
end = line.rfind(']')
if end == len(line)-1: #跳过空行
continue
outfile.write(line[end:])
[/python]

不过可能只有 Python 3 支持 with 后接多个 as 子句。只针对所有符合我自己的期望的 LRC 格式。
回复

回到 “Python/Php/Perl”