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

2024-06-01 21:32:42 发布

您现在位置: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

等等

我的第一个目标是获取显示的第一时间代码。你知道吗

我知道每行的first timecode从字符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

我一直在不懈地寻找,想弄清楚我做错了什么,但运气不好。。再次,完全初学者在这里,所以我很抱歉,如果这是纯粹的愚蠢。你知道吗

非常感谢!你知道吗


Tags: namefrom列表clipax字符firstmov
2条回答

你想从29岁开始,而不是29岁结束。而且,lstrip()会起飞更多。 尝试用以下内容替换第四行:

print(myline[29:])

lstrip并不是你所期望的那样。myline.lstrip(myline[:29])将删除myline左侧的字符,只要它们在myline[:29]中的任何地方,即myline的第一个29字符。因此,您当然要删除第一个29字符,但也要删除时间代码开头的01,因为01出现在myline的第一个29字符中。(仍然会删除0,因为您错误计算了绑定,myline[:29]将包含第29个字符)。你知道吗

您可以选择所有字符,从第29个字符开始,使用myline[29:]。你知道吗

相关问题 更多 >