我真的很抱歉,如果之前已发布,但我在网上找不到答案。
我正在阅读字幕并希望排除主题歌/结尾。它们用“♪”符号表示在一行的开头。我试图使用ASCII值和chr()命令,但无法使其正常工作。
如果有人可以发布方式来查看“♪”符号何时出现在字符串中,我们将非常感激。
感谢您的时间。
答案 0 :(得分:1)
迭代输入字幕文件中的行,并将那些不以u'\u266a'
(♪)开头的行写入输出文件。
对于Python 2& 3:
with open('file.srt') as subs, open('outfile.srt', 'w') as out:
for line in subs:
if not line.startswith(u'\u266a'):
out.write(line)
如果你想在任何地方找到包含♪的行,只需使用in
:
if not u'\u266a' in line:
当然,这将删除以♪开头的所有行,而不仅仅是歌曲结尾的行。它可能甚至没有效果,因为不同的字幕文件格式做不同的事情。为了仅去除那些字幕行,需要知道主题歌被播放的时间范围,并且这需要知道字幕文件格式,因为时间代码表示变化。例如,SRT文件包含每个字幕的多行,如下所示:
3 00:01:25,640 --> 00:01:27,510 Go any deeper... 4 00:01:28,160 --> 00:01:29,700 .. we die.
所以现在你需要检测以♪开头的行,然后备份并删除前面的2行,并删除以下行。我不是文件格式的专家....第一行看起来像一个序列号,我不知道它是否必须是连续的。在这种情况下,通常更容易将整个文件读入列表,然后处理列表。
无论如何,现在您已经知道如何检测以特定unicode字符开头的行,因此您可以从中继续。
答案 1 :(得分:0)
"♪"不在ASCII字符集中。它采用IBM PC上13位(0x0D)处使用的字体。在unicode字符集中,它位于0x266A位置,所以在Python中你可以使用u"\u266A"
。如果指定源文件的编码,则只需在字符串中包含任何字符:
# -*- coding: utf-8 -*-
print("♪")
请注意还有一个问题:如果输出代码页无法对该字符进行编码,则python会引发异常:
print("\u266A")
UnicodeEncodeError: 'charmap' codec can't encode character '\u266a' in position 0: character maps to <undefined>
如果你想打印到控制台,在python 3.4中(可能更早,但不是在python 2.7中)你可以通过在启动程序之前更改代码页(例如执行chcp 65001
)来解决这个问题。 / p>
答案 2 :(得分:0)
def find_music_in_string(my_string):
for char in my_string:
if ord(char) == 9834:
print 'i have found you ' + char
find_music_in_string(u'\u266a')
ord()
获取char的int值,♪的值为9832.