删除每行的前29个字符,不能打印正确的结果

时间:2019-08-27 22:02:36

标签: python

我是Python的初学者,试图编写我的第一个脚本。 我有一个包含多行的文本文件,最终需要从列表中提取一段时间码。 列表如下所示:

010  AX       V     C        01:01:26:10 01:01:27:17 01:00:08:19 01:00:10:02
* FROM CLIP NAME: movie1.mov

011  AX       V     C        01:01:30:19 01:01:32:19 01:00:10:02 01:00:12:02
* FROM CLIP NAME: movie2.mov

012  AX       V     C        01:00:15:01 01:00:17:13 01:00:12:02 01:00:14:14
* FROM CLIP NAME: movie3.mov

我的第一个目标是获取显示的第一个时间码。

我知道每一行的第一个时间码都从29号字符开始,到40号字符结束,因此我首先尝试删除前29个字符,但是无论何时打印,它都不是从正确的字符开始的。

timecode = []                               # Declaring my empty list.
with open ('test.edl', 'rt') as myfile:     # Opening the edl.
    for myline in myfile:                   # For each line in the file,
        print(myline.lstrip(myline[:29]))   # strip first 29 chars

而不是剥离前29个字符,我得到的是回报:

:01:26:10 01:01:27:17 01:00:08:19 01:00:10:02

movie1.mov


:01:30:19 01:01:32:19 01:00:10:02 01:00:12:02

movie2.mov


:00:15:01 01:00:17:13 01:00:12:02 01:00:14:14

movie3.mov

即使我将print(myline.lstrip(myline[:29]))更改为[:25],它也会以相同的方式打印行。

当我使用[:20]时,它给我带来了更好的结果,但仍然不正确。

C 01:00:15:01 01:00:17:13 01:00:12:02 01:00:14:14

我一直在不停地搜索以弄清楚我在做什么错,但是没有运气。.同样,请在这里完成初学者,如果这很愚蠢,我感到抱歉。

非常感谢您!

2 个答案:

答案 0 :(得分:3)

lstrip并没有达到您的预期。只要在myline.lstrip(myline[:29])中的任意位置找到{em},myline就会从myline[:29]的左侧删除字符,即{{ 1}}。因此,您肯定要删除时间代码的前29个字符,而且还要删除myline,因为2901出现在前{{1 }个0个字符。 (无论如何,1都会被删除,因为您错误地计算了边界,29会包含第myline个字符)。

您可以选择所有字符,从第0个字符到myline[:29]

答案 1 :(得分:1)

您想从29开始,而不是从29开始。另外,lstrip()将会起飞。 尝试用此替换您的第四行:

print(myline[29:])