Создание csv-файла из srt-файла (субтитры «Друзья») в python - PullRequest
0 голосов
/ 03 декабря 2018

В настоящее время я пытаюсь создать CSV-файл, содержащий субтитры «Друзей» NBC и соответствующее им время запуска.Поэтому в основном я пытаюсь превратить srt-файл в csv-файл на python.

Для тех из вас, кто не знаком с srt-файлами, они выглядят так:

1
00:00:47,881 --> 00:00:49,757
[CAR HORNS HONKING]

2
00:00:49,966 --> 00:00:52,760
There's nothing to tell.
It's just some guy I work with.

3
00:00:52,969 --> 00:00:55,137
Come on.
You're going out with a guy.

…

Теперь я использовал readlines(), чтобы превратить его в список, подобный следующему:

['\ufeff1\n', '00:00:47,881 --> 00:00:49,757\n', '[CAR HORNS HONKING]\n',
'\n', '2\n', '00:00:49,966 --> 00:00:52,760\n',
"There's nothing to tell.\n", "It's just some guy I work with.\n",
'\n', '3\n', '00:00:52,969 --> 00:00:55,137\n', 'Come on.\n',
"You're going out with a guy.\n", ...]

Есть ли способ создать dict или фрейм данных из этого списка (или файла, на котором он основан), который содержитвремя начала (время окончания не требуется) и принадлежащие ему строки.Я изо всех сил, потому что, хотя иногда только одна строка соответствует времени начала, в других случаях их две (в этом файле максимум две строки на время запуска. Однако решение можно использовать, если еще больше строкподарок будет предпочтительным).

Строки, похожие на первую («[HORNS CAR HONKING]») или другие, которые просто говорят, например, «CHANDLER:», и их время запуска в идеале не должно быть включено, но это не таквсе это важно прямо сейчас.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 03 декабря 2018

Я думаю, что этот код покрывает вашу проблему.Основная идея состоит в том, чтобы использовать регулярное выражение, чтобы найти время начала каждой легенды и извлечь ее значение и соответствующие строки.Код не в самой изысканной форме, но я думаю, что основная идея хорошо выражена.Надеюсь, это поможет.

import re

with open('sub.srt', 'r') as h:
    sub = h.readlines()

re_pattern = r'[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} -->'
regex = re.compile(re_pattern)
# Get start times
start_times = list(filter(regex.search, sub))
start_times = [time.split(' ')[0] for time in start_times]
# Get lines
lines = [[]]
for sentence in sub:
    if re.match(re_pattern, sentence):
        lines[-1].pop()
        lines.append([])
    else:
        lines[-1].append(sentence)
lines = lines[1:]         

# Merge results
subs = {start_time:line for start_time,line in zip(start_times, lines)}
...