Python 以编程方式匹配和合并文本文件

Python 以编程方式匹配和合并文本文件,python,text-parsing,merging-data,Python,Text Parsing,Merging Data,我想将一个EDL(编辑决策列表)文本文件与另一个包含字幕的文本文件合并。EDL由视频编辑程序Final Cut Pro生成,而文本文件只是普通文本。虽然这个特定的请求是针对特定的最终用途,但我想了解进行此类处理时可以遵循的一般方法。我对Python很熟悉,但对其他语言的示例也很熟悉,只要它们清晰且易于在UNIX/Mac工作站上使用 以下是EDL文件前几行的示例: TITLE: SAMPLE EDL FCM: NON-DROP FRAME 001 GEN V C

我想将一个EDL(编辑决策列表)文本文件与另一个包含字幕的文本文件合并。EDL由视频编辑程序Final Cut Pro生成,而文本文件只是普通文本。虽然这个特定的请求是针对特定的最终用途,但我想了解进行此类处理时可以遵循的一般方法。我对Python很熟悉,但对其他语言的示例也很熟悉,只要它们清晰且易于在UNIX/Mac工作站上使用

以下是EDL文件前几行的示例:

TITLE: SAMPLE EDL
FCM: NON-DROP FRAME

001  GEN      V     C        00:01:03:16 00:01:04:29 01:00:03:06 01:00:04:19  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

002  GEN      V     C        00:01:04:15 00:01:08:03 01:00:04:29 01:00:08:17  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

003  GEN      V     C        00:01:04:15 00:01:09:05 01:00:10:19 01:00:15:09  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

004  GEN      V     C        00:01:04:15 00:01:07:03 01:00:17:17 01:00:20:05  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR
下面是来自字幕文本文件的四个“伴随”行的示例:

001

If we think about climate change,

002

most of society's focused on fossil fuel combustion.

003

But what humans release on an annual basis is just one part of the carbon cycle.

004

Carbon dioxide concentrations also go up and down
最后,这里是一个期望最终结果的示例:

[00:00:03.06]
If we think about climate change,
[00:00:04.19]

[00:00:04.29]
most of society's focused on fossil fuel combustion.
[00:00:08.17]

[00:00:10.19]
But what humans release on an annual basis is just one part of the carbon cycle.
[00:00:15.09]

[00:00:17.17]
Carbon dioxide concentrations also go up and down
[00:00:20.05]
查看示例EDL文件,重要的文本位包括:

  • 行号,即
    001
    002
    003
  • 时间代码的第三列和第四列,即

    01:00:03:06 01:00:04:19
    01:00:04:29 01:00:08:17
    01:00:10:19 01:00:15:09
    
  • 从字幕文本文件中,行号与EDL文件中的行号相对应。这是一对一的匹配,序列中没有偏移或间隙。文本的每一行都应作为一整行进入所需的最终结果,不带换行符

    最终结果基本上是将字幕文本的每一行都夹在第一个和第二个时间码之间。时间代码编号也需要通过以下方式稍微重新格式化:

  • 在方括号中围绕每组,即
    []
  • 确保第一组数字(小时数)归零,即
    01:00:03:06
    变为
    00:00:03:06
    07:06:15:22
    变为
    00:06:15:22
  • 最后一个冒号“
    ”(帧编号之前)转换为句点“
    ”,即
    00:00:03:06
    变为
    00:00:03.06
  • 差不多就是这样。在字幕文本文件中可以有大约100到120行文本,在EDL文本文件中相应地有100到120行“决策”。如果需要进一步解释,请直接询问。我面临的主要问题是如何从这一点开始。虽然我可以通过编程方式处理单个文件中的一行文本,但对于如何管理多个文件之间的多行文本,我有点不知所措


    提前谢谢大家。

    大致上这就是计划

    • 读文件
    • 为每种类型的文件创建解析器
    • 将数据存储在有用的数据结构/对象中
    • 以适当的格式输出

    分解每一步,直到只需写下代码。在每个步骤进行测试。

    这是从一个文件到另一个文件的1对1匹配。将每个文件解析为有用标记的列表

    一个列表将有开始和结束时间,另一个将有字幕

    (开始、结束时间):

    另一个文件将具有:

    "If we think about climate change," -> "most of .. fuel combustion" -> "But what .. carbon cycle" -> ..
    

    现在循环浏览这两个文件并合并两个列表(1到1)(可能创建一个新列表)。最后,将新列表写入文件。

    感谢Navi的反馈。我认为在这里提出我的问题有点帮助。这就是说,一些例子将有助于了解一种解决这一问题的好方法。虽然问题本身是非常具体的,但我认为可以用来解决这一问题的一般概念对人来说是有用的。
    "If we think about climate change," -> "most of .. fuel combustion" -> "But what .. carbon cycle" -> ..