微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:需要一个类似字节的对象,而不是“str”?

如何解决类型错误:需要一个类似字节的对象,而不是“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 举报,一经查实,本站将立刻删除。