从 python 中的 srt 文件("Friends" 字幕)创建 csv 文件
Creating a csv-file from an srt-file ("Friends" subtitles) in python
目前,我正在尝试创建一个 csv 文件,其中包含 NBC "Friends" 的字幕及其相应的开始时间。所以基本上我试图在 python.
中将 srt 文件转换为 csv 文件
对于那些不熟悉 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", ...]
有没有办法从此列表(或其基于的文件)创建包含开始时间(不需要结束时间)和属于它的行的字典或数据框。我一直在努力,因为虽然有时只有一行对应于开始时间,但有时有两行(此文件中每个开始时间最多有两行。但是,如果有更多行,则可以使用一种解决方案现在最好)。
看起来像第一行的行(“[CAR HORNS HONKING]”)或其他只写 e 的行。 G。 "CHANDLER:" 他们的开始时间最好不包括在内,但现在这并不是那么重要。
非常感谢任何帮助!
我认为这段代码可以解决您的问题。主要思想是使用正则表达式定位每个图例的开始时间并提取其值和对应的行。代码不是最优美的形式,但我认为主要思想表达得很好。希望对你有帮助。
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)}
目前,我正在尝试创建一个 csv 文件,其中包含 NBC "Friends" 的字幕及其相应的开始时间。所以基本上我试图在 python.
中将 srt 文件转换为 csv 文件对于那些不熟悉 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", ...]
有没有办法从此列表(或其基于的文件)创建包含开始时间(不需要结束时间)和属于它的行的字典或数据框。我一直在努力,因为虽然有时只有一行对应于开始时间,但有时有两行(此文件中每个开始时间最多有两行。但是,如果有更多行,则可以使用一种解决方案现在最好)。
看起来像第一行的行(“[CAR HORNS HONKING]”)或其他只写 e 的行。 G。 "CHANDLER:" 他们的开始时间最好不包括在内,但现在这并不是那么重要。
非常感谢任何帮助!
我认为这段代码可以解决您的问题。主要思想是使用正则表达式定位每个图例的开始时间并提取其值和对应的行。代码不是最优美的形式,但我认为主要思想表达得很好。希望对你有帮助。
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)}