在Python的文本文件中替换和添加文本

2024-06-03 06:25:15 发布

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

我需要把.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.

我不知道如何解决这项任务。你知道吗


Tags: 文件default过程etcxmlsomethingend字幕
3条回答

又快又脏:

>>> 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>

首先,应该从源文件中提取相关信息。由于数据是,分隔的,因此可以使用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),这是一个可读的方法IMHO。你知道吗

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)

相关问题 更多 >