使用Python将SRT(子RIP文本)转换为JSON

使用Python将SRT(子RIP文本)转换为JSON,python,json,algorithm,Python,Json,Algorithm,我正在尝试从SRT文件生成JSON文件。我正在使用Python来完成这项任务。我有下面的代码,当在终端上编写输出时,显示的是正确的输出,但当我用它生成一个JSON文件时,每行后面都显示/n。我不知道为什么会这样。这里有人能帮忙吗?如果没有生成,那么我只想从SRT文件中获取变量。比如时间或句子。让我们假设SRT中的每个句子都有开始时间和结束时间。我想获取startTime,即使不生成输出,我们也可以这样做吗?我这里没有线索。感谢您的帮助 这是密码 import sys import re impo

我正在尝试从SRT文件生成JSON文件。我正在使用Python来完成这项任务。我有下面的代码,当在终端上编写输出时,显示的是正确的输出,但当我用它生成一个JSON文件时,每行后面都显示/n。我不知道为什么会这样。这里有人能帮忙吗?如果没有生成,那么我只想从SRT文件中获取变量。比如时间或句子。让我们假设SRT中的每个句子都有开始时间和结束时间。我想获取startTime,即使不生成输出,我们也可以这样做吗?我这里没有线索。感谢您的帮助

这是密码

import sys
import re
import json

regex = r'(?:\d+)\s(\d+:\d+:\d+,\d+) --> (\d+:\d+:\d+,\d+)\s+(.+?)(?:\n\n|$)'
offset_seconds = lambda ts: sum(howmany * sec for howmany, sec in zip(map(int, ts.replace(',', ':').split(':')), [60 * 60, 60, 1, 1e-3]))

transcript = [dict(startTime = offset_seconds(startTime), endTime = offset_seconds(endTime), ref = ' '.join(ref.split())) for startTime, endTime, ref in re.findall(regex, open('My_SRT_File.srt').read(), re.DOTALL)]

a=json.dumps(transcript, ensure_ascii = False, indent = 2)

with open('data.json','w', encoding='utf-8') as f:
    json.dump(a,f, ensure_ascii=False, indent=4)
生成的json文件的输出:

“[\n{\n“startTime”:30.0、\n“endTime”:36.0、\n“ref”:”由YTS.LT提供\n}、\n{\n“startTime”:36.5、\n“endTime”:42.0、\n“ref”:”找到YIFY电影的官方网站https://YTS.LT“\n}、\n{\n“开始时间”:1830.0、\n“结束时间”:1836.0、\n“参考”:“从YTS.LT下载”\n}、\n{\n“开始时间”:3630.0\n“endTime”:3636.0\n“ref”:“从YTS.LT免费下载更多电影”\n}\n]


您将看到它不是正确的JSON格式,而且\n无处不在。

您正在使用
JSON.dumps
将Python对象转换为字符串,然后写出字符串……但是
JSON.dump
可以直接写出对象

之所以有\n和all,是因为json库将字符串对象视为要写出的json对象。您应该将json对象(字典或列表)直接传递到
json.dump

import sys
import re
import json

regex = r'(?:\d+)\s(\d+:\d+:\d+,\d+) --> (\d+:\d+:\d+,\d+)\s+(.+?)(?:\n\n|$)'
offset_seconds = lambda ts: sum(howmany * sec for howmany, sec in zip(map(int, ts.replace(',', ':').split(':')), [60 * 60, 60, 1, 1e-3]))

transcript = [dict(startTime = offset_seconds(startTime), endTime = offset_seconds(endTime), ref = ' '.join(ref.split())) for startTime, endTime, ref in re.findall(regex, open('My_SRT_File.srt').read(), re.DOTALL)]


with open('data.json','w', encoding='utf-8') as f:
    json.dump(transcript ,f)