繁体   English   中英

在 Python 中附加到 csv 文件时忽略元素

[英]Ignoring an element when appending to a csv file in Python

我有一个像这样的 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 文件的每个部分都有这个。 所以我不想把 Speaker 放在我的 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]

在我的代码中,但它在它周围添加了引号。

我如何实现文件名;开始时间;结束时间;演讲者;;带有;;成绩单线前

我不想将 Speaker 放入我的 csv 文件中。 但是我下面的代码无论如何都会添加扬声器 ID,尽管如果没有 S#

您在组装行时明确添加扬声器:

new_list = [CSVFILE, t1, t2, speaker,'\;', line]

所以不要那样做。 当它添加一个扬声器时,即使没有扬声器,发生的事情是它使用分配给speaker的最后一个值。 在每个块之后,您应该重置该变量: speaker = None

我如何实现文件名;开始时间;结束时间;演讲者;;带有 ;; 的成绩单线前

2 个分隔符并排表示有一个空字段,因此只需在字段列表中的适当位置放置一个 None: [filename, starttime, endtime, speaker, None, transcripts])空字符串也可以使用。

但是我以为您是在尝试删除扬声器字段。 那么不是[filename, starttime, endtime, None, transcripts]吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM