在String中检测“♪”

时间:2015-03-30 02:30:05

标签: python string character ascii

我真的很抱歉,如果之前已发布,但我在网上找不到答案。

我正在阅读字幕并希望排除主题歌/结尾。它们用“♪”符号表示在一行的开头。我试图使用ASCII值和chr()命令,但无法使其正常工作。

如果有人可以发布方式来查看“♪”符号何时出现在字符串中,我们将非常感激。

感谢您的时间。

3 个答案:

答案 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.