【发布时间】:2019-11-28 18:42:50
【问题描述】:
我有一个像这样的 srt 文件
355
00:52:44,533 --> 00:52:51,467
Og så er der selvfølgelig masser af valg både her på <initial> P </initial> et og på nettet og på <initial> DR </initial> et i løbet af dagen og i aften. Godt valg.
356
S1 00:52:54,733 --> 00:53:01,933
Du kan finde alle <initial> P </initial> et programmer på dr punktum dk skråstreg <initial> P </initial> et. Det giver mening.
S1 是一个扬声器 ID,但不是我的 srt 文件的每个部分都有这个。所以我不想把扬声器放在我的 csv 文件中。
但是我下面的代码无论如何都会添加扬声器ID,尽管如果没有S#
例如下面的S4,
filename.csv;211.03300000000002;218.833;S4;Det at at beslutte sig er jo ikke kun at beslutte sig for hvilket parti det jo også først og fremmest beslutte sig om vil man stemme, vil man ikke stemme, det vil de fleste jo så.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import re
import csv
SRTFILE = sys.argv[1]
CSVFILE = re.sub(r'\.srt$', '.csv', SRTFILE)
BASEFILE = re.sub(r'\.srt$', '', SRTFILE)
if CSVFILE == SRTFILE:
sys.exit('check the srt suffix')
with open(SRTFILE, 'r') as fid:
lines = fid.readlines()
newLine = False
transcript = []
captionStart = False
speaker = ''
t1 = 0
t2 = 0
for line in lines:
line = line.strip()
if re.match(r'^[0-9]+$', line):
newLine = True
continue
if re.match(r'^$', line):
if captionStart and len(transcript) > 0:
continue
print '%s;%1.3f;%1.3f;%s;;%s'%(BASEFILE, t1, t2, speaker, ' '.join(transcript))
newLine = False
transcript = []
continue
matchobj = re.match(r'^([0-9][0-9]):([0-9][0-9]):([0-9][0-9][,\.][0-9]{2,3}) +--> +([0-9][0-9]):([0-9][0-9]):([0-9][0-9][,\.][0-9]{2,3})$', line)
if matchobj:
t1 = int(matchobj.group(1))*3600.0 + int(matchobj.group(2))*60.0 + float(re.sub(r',', '.', matchobj.group(3)))
t2 = int(matchobj.group(4))*3600.0 + int(matchobj.group(5))*60.0 + float(re.sub(r',', '.', matchobj.group(6)))
captionStart = True
continue
else:
matchobj = re.match(r'^([a-zA-Z0-9]+) +([0-9][0-9]):([0-9][0-9]):([0-9][0-9][,\.][0-9]{2,3}) +--> +([0-9][0-9]):([0-9][0-9]):([0-9][0-9][,\.][0-9]{2,3})$', line)
if matchobj:
t1 = int(matchobj.group(2))*3600.0 + int(matchobj.group(3))*60.0 + float(re.sub(r',', '.', matchobj.group(4)))
t2 = int(matchobj.group(5))*3600.0 + int(matchobj.group(6))*60.0 + float(re.sub(r',', '.', matchobj.group(7)))
speaker = matchobj.group(1)
captionStart = True
continue
if newLine:
transcript.append(line)
if speaker:
print(CSVFILE, t1, t2, speaker, line)
if speaker:
new_list = [CSVFILE, t1, t2, speaker, line]
print(CSVFILE, t1, t2, speaker, line)
with open(CSVFILE, 'a') as fid:
writer = csv.writer(fid, delimiter=';')
writer.writerow(new_list)
else:
print(CSVFILE, t1, t2, line)
new_list = [CSVFILE, t1, t2, speaker,'\;', line]
with open(CSVFILE, 'a') as fid:
writer = csv.writer(fid, delimiter=';')
writer.writerow(new_list)
请告诉我如何解决这个问题。
(我为以下问题道歉,您可以忽略它) 我也有一个简单的问题。 然后我想将我的 csv 文件格式化如下
filename;starttime;endtime;speaker;;transcripts
在我的代码中,成绩单或line 前有两个分号。我试过了
new_list = [CSVFILE, t1, t2, speaker, ";",line]
在我的代码中,但它在它周围添加了引号。
如何实现文件名;开始时间;结束时间;扬声器;;行前带有;; 的成绩单
【问题讨论】:
标签: python python-3.x csv srt