【问题标题】:Ignoring an element when appending to a csv file in Python在 Python 中附加到 csv 文件时忽略元素
【发布时间】: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


    【解决方案1】:

    我不想将扬声器放在我的 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]吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-15
      • 2021-01-17
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2014-08-14
      • 2019-12-01
      • 1970-01-01
      相关资源
      最近更新 更多