如何解决类型错误:需要一个类似字节的对象,而不是“str”?
如何转换此数据以保存字幕?
data={"tt0064621":
{"title": "Name of movie - 1971","subtitle": "b'1\\n00:00:40,916 --> 00:00:46,346\\n\\xe2\\x99\\xaa A"
"\\B \\xe2\\x99\\xaa\\n\\n2\\n00:00:47,381 --> 00:00:50,174"
"\\n\\xe2\\x99\\xaa It\\'s C \\xe2\\x99\\xaa\\n\\n3\\n00:00:50,175 -->'"}}
sub_create= data["tt0064621"]['subtitle']
saved_file_name = "subtitle.srt"
with open(saved_file_name,'wb') as f:
f.write(sub_create) #sub_create.encode() Doesn't work
解决方法
由于 subtitle
字段中的内容是 Python 代码,因此您只需对其调用 eval
。这是您更新后的代码版本:
import ast
data={"tt0064621":
{"title": "Name of movie - 1971","subtitle": "b'1\\n00:00:40,916 --> 00:00:46,346\\n\\xe2\\x99\\xaa A"
"\\B \\xe2\\x99\\xaa\\n\\n2\\n00:00:47,381 --> 00:00:50,174"
"\\n\\xe2\\x99\\xaa It\\'s C \\xe2\\x99\\xaa\\n\\n3\\n00:00:50,175 -->'"}}
sub_create= ast.literal_eval(data["tt0064621"]['subtitle']) # <-- added call to
saved_file_name = "/tmp/subtitle.srt"
with open(saved_file_name,'wb') as f:
f.write(sub_create) #sub_create.encode() Doesn't work
'/tmp/subtitle.srt' 的结果内容:
1
00:00:40,346
♪ A\B ♪
2
00:00:47,174
♪ It's C ♪
3
00:00:50,175 -->
这是一件有点奇怪的事情,但如果您无法更改数据的格式,那么这似乎是解决问题的好方法。如果您可以将数据更改为不嵌入 Python 代码(或其他看起来像 Python 字节数组常量的内容),那就更好了。
更新:请注意@kaya3 的警告,担心这些数据可能来自哪里,因此有在其上运行完整 eval
的风险,我已根据他们的建议更改了代码以使用更安全的替代方案,ast.literal_eval
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。