1

.ass字幕ファイルを.xmlファイルに変換する必要があります。今までは手作業でやっていましたが、どんどんやらなくてはいけません。

プロセスは次のようになります。

入力.assファイル:

Dialogue: 0,0:00:08.03,0:00:10.57,Default,,0000,0000,0000,,Actor says something
Dialogue: 0,0:00:11.28,0:00:21.05,Default,,0000,0000,0000,,Actor says something
etc.

出力.xmlファイル:

<p begin="00:00:08.03" end="00:00:10.57">Actor says something</p>
<p begin="00:00:11.28" end="00:00:21.05">Actor says something</p>
etc.

この課題を解決する方法がわかりません。

4

3 に答える 3

1

まず、ソース ファイルから関連情報を抽出する必要があります。データは,分離されているため、python csv モジュールを使用するか、単純なsplit(',').

これは、どのように見えるかのメソッドの例です:

def extract(source):
    for line in iter(source):
        _, start, end, _, _, _, _, _, _, text = line.strip().split(',', 9)
        yield start, end, text

次のステップは、抽出したデータを目的の xml 形式に変換する場合です。最初のメソッドのデータを適切に処理する関数は、次のようになります (単純な文字列の書式設定を使用)。

xml = '<p begin="{start}" end="{end}">{text}</p>'
def to_xml(start, end, text):
    return xml.format(start=start, end=end, text=text)

最後に、ファイルを開き、メソッドを使用して出力を書き込みます。

with open('input.ass') as infile, open('output.xml', 'w') as outfile:
    for start, end, text in extract(infile):
        outfile.write(to_xml(start, end, text) + '\n')

もちろん、これを小さくする(LOCを減らす)こともできますが、これは読みやすいアプローチです。

于 2012-08-17T11:52:00.250 に答える
0
src = [
'Dialogue: 0,0:00:08.03,0:00:10.57,Default,,0000,0000,0000,,Actor says something',
'Dialogue: 0,0:00:11.28,0:00:21.05,Default,,0000,0000,0000,,Actor says something',
]
tpl = '<p begin="0%s" end="0%s">%s</p>'
for i in src:
    fields = i.split(',')
    start, end, txt = fields[1], fields[2], fields[-1]
    print tpl % (start, end, txt)
于 2012-08-17T11:51:05.437 に答える
0

クイック&ダーティ:

>>> subs = """Dialogue: 0,0:00:08.03,0:00:10.57,Default,,0000,0000,0000,,Actor s
ays something, then some more
... Dialogue: 0,0:00:11.28,0:00:21.05,Default,,0000,0000,0000,,Actor says someth
ing"""
>>> for line in subs.split("\n"):
...     print('<p begin="{0[1]}" end="{0[2]}">{0[9]}</p>'.format(
...            line.split(",", 9))) # Split no more than 9 times
...
<p begin="0:00:08.03" end="0:00:10.57">Actor says something, then some more</p>
<p begin="0:00:11.28" end="0:00:21.05">Actor says something</p>
于 2012-08-17T11:48:35.790 に答える