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

在Python中替换和添加文本文件中的文本,python,replace,text-files,Python,Replace,Text Files,我需要将.ass字幕文件转换为.xml文件。到目前为止,我是手工做的,但我必须做的越来越多 这就是过程的样子: Input.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. Output.xml文件: &

我需要将.ass字幕文件转换为.xml文件。到目前为止,我是手工做的,但我必须做的越来越多

这就是过程的样子:

Input.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.
Output.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.

演员说了些什么

演员说了些什么

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

又快又脏:

>>> 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>
>>subs=“”对话:0,0:00:08.03,0:00:10.57,默认值,000000000000,参与者s
有东西,然后还有更多
…对话:0,0:00:11.28,0:00:21.05,默认值,000000000000,演员说
ing”“”
>>>对于分段中的行(“\n”):
...     打印(“

{0[9]}

”。格式( …行。拆分(“,”,9))#拆分不超过9次 ...

演员说了些什么,然后又说了些什么

演员说了些什么

又快又脏:

>>> 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>
>>subs=“”对话:0,0:00:08.03,0:00:10.57,默认值,000000000000,参与者s
有东西,然后还有更多
…对话:0,0:00:11.28,0:00:21.05,默认值,000000000000,演员说
ing”“”
>>>对于分段中的行(“\n”):
...     打印(“

{0[9]}

”。格式( …行。拆分(“,”,9))#拆分不超过9次 ...

演员说了些什么,然后又说了些什么

演员说了些什么

src=[
'对话:0,0:00:08.03,0:00:10.57,默认值,000000000000,演员说话',
'对话:0,0:00:11.28,0:00:21.05,默认值,000000000000,演员说话',
]
tpl='

%s

' 对于src中的i: 字段=i.split(',') 开始,结束,txt=字段[1],字段[2],字段[-1] 打印tpl%(开始、结束、txt)
src=[
'对话:0,0:00:08.03,0:00:10.57,默认值,000000000000,演员说话',
'对话:0,0:00:11.28,0:00:21.05,默认值,000000000000,演员说话',
]
tpl='

%s

' 对于src中的i: 字段=i.split(',') 开始,结束,txt=字段[1],字段[2],字段[-1] 打印tpl%(开始、结束、txt)
首先,您应该从源文件中提取相关信息。由于数据是
分离的,因此可以使用python csv模块或执行简单的
拆分(',')

这是一个示例方法,说明了它的外观:

def extract(source):
    for line in iter(source):
        _, start, end, _, _, _, _, _, _, text = line.strip().split(',', 9)
        yield start, end, text
下一步是将提取的数据转换为所需的xml格式。能够很好地处理第一个方法中的数据的函数可以如下所示(使用简单的字符串格式):


当然,您可以将其缩小(减少LOC),这是一种可读的方法。首先,您应该从源文件中提取相关信息。由于数据是
分离的,因此可以使用python csv模块或执行简单的
拆分(',')

这是一个示例方法,说明了它的外观:

def extract(source):
    for line in iter(source):
        _, start, end, _, _, _, _, _, _, text = line.strip().split(',', 9)
        yield start, end, text
下一步是将提取的数据转换为所需的xml格式。能够很好地处理第一个方法中的数据的函数可以如下所示(使用简单的字符串格式):


当然,您可以将其缩小(减少LOC),这是一种可读的方法。

我认为您可以使用
csv
模块解析输入(前提是您在开始时删除“对话”内容),然后使用xml发射器获得输出(
xml.dom.minidom
应该可以做到这一点)@thomasorzco:你甚至不需要删除“对话”。我认为你可以使用
csv
模块来解析输入(前提是你在开始时删除了“对话”部分),然后使用xml发射器来获取输出(
xml.dom.minidom
应该可以做到)。@thomasorzco:你甚至不需要删除“对话”.如果字幕本身包含逗号怎么办?如果字幕本身包含逗号怎么办?这不会被解析,因为您没有添加
root
元素。@ZagorulkinDmitry:当然,但是他的示例输出也没有,所以我想他自己会将其包装在根元素中。毕竟,那是微不足道的。谢谢你。我原以为主题初学者不知道xml验证。这是不会被解析的,因为您没有添加
root
元素。@ZagorulkinDmitry:当然,但他的示例输出也不知道,所以我假设他自己会将其包装在根元素中。毕竟,那是微不足道的。谢谢你。我以为那个话题的发起者不知道xml验证。
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')