TypeError:需要byteslike对象,而不是'str'?

2024-06-28 12:14:43 发布

您现在位置:Python中文网/ 问答频道 /正文

如何转换此数据以保存字幕?

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

Tags: 数据namedatatitlecreatefile字幕xe2
1条回答
网友
1楼 · 发布于 2024-06-28 12:14:43

由于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,916  > 00:00:46,346
♪ A\B ♪

2
00:00:47,381  > 00:00:50,174
♪ It's C ♪

3
00:00:50,175  >

这是一件很奇怪的事情,但是如果你不能改变数据的格式,那么这似乎是解决问题的好方法。如果您可以更改数据,使其不嵌入Python代码(或类似于Python字节数组常量的其他内容),则效果会更好

更新:请注意@kaya3的警告,担心这些数据可能来自何处,因此可能会在其上运行完整的eval,我已根据他们的建议更改代码,以使用更安全的替代方案ast.literal_eval

相关问题 更多 >