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

时间:2011-01-23 20:55:19

标签: 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        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文件,文本的重要部分是:

  1. 行号,即001 002 003 ...
  2. 第三和第四列时间码编号,即

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

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

    1. 围绕方括号中的每一组,即[]
    2. 确保第一组数字(小时数)已清零,即01:00:03:06变为00:00:03:0607:06:15:22变为00:06:15:22
    3. 最后一个冒号“:”(在帧编号之前)被转换为句点“.”,即00:00:03:06变为00:00:03.06
    4. 这就是它。字幕文本文件中可以有大约100到120行文本,EDL文本文件中可以有相应的100到120个'决定'。如果需要进一步说明,请询问。我遇到的主要问题是找出如何开始这个甚至。虽然我可以通过编程方式在单个文件中操作单行文本,但是对于如何管理多个文件之间的多行来说,我有点不知所措。

      先谢谢所有人。

2 个答案:

答案 0 :(得分:2)

大致这应该是计划。

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

分解每一步,直到,这只是在代码中写下来的问题。每一步测试。

答案 1 :(得分:0)

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

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

(开始,结束时间):

01:00:03:06 01:00:04:19 -> 01:00:04:29 01:00:08:17 -> 01:00:10:19 01:00:15:09 -> ...

另一个文件将包含:

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

现在遍历两个文件并合并2个列表(1到1)(可能创建一个新列表)。最后将新列表写入文件。