python - 如何将错误保存的字节对象转换回字节?(蟒蛇/django)
问题描述
我已经下载了一些带有请求的网页,并使用 Django 的 ORM 将内容保存在 postgres 数据库中[在文本字段中]。对于正在发生的事情的一些 sudocode,请看这里:
art = Article()
page = requests.get("http://example.com")
art.raw_html = page.content
art.save()
我验证了 page.content 是一个字节对象,我想我假设这个对象会在保存时自动解码,但它似乎不是......它已被转换为字节对象的一些奇怪的字符串表示,表面上是由 Django 编写的。当我调用 art.raw_html 时,它在解释器中看起来像这样:
'b\'<!DOCTYPE html>\\n<html lang="en" class="pb-page"
如果我用 print 调用它,我会得到:
b'<!DOCTYPE html>\n<html lang="en" class="pb-page"
而且对于我的生活,我无法将它重新编码为字节对象,即使我修剪掉前导 b' 和尾随 '。
我觉得有一个简单的解决方案,我觉得自己像个白痴......但经过大量的实验和谷歌搜索,我没有弄清楚。
顺便说一句,如果我手动复制从 print 语句返回的内容(例如使用光标),我可以将剪贴板内容转换回字节对象,然后将其解码为一些可读格式的 html。
显然有更好的方法。(是的,今后我将首先停止保存这样的内容。)
解决方案
您可以使用 eval 或 ast.literal_eval 如下。
data = "b'gAAAAABc1arg48DmsOwQEbeiuh-FQoNSRnCOk9OvXXOE2cbBe2A46gmP6SPyymDft1yp5HsoHEzXe0KljbsdwTgPG5jCyhMmaA=='"
eval(data)
b'gAAAAABc1arg48DmsOwQEbeiuh-FQoNSRnCOk9OvXXOE2cbBe2A46gmP6SPyymDft1yp5HsoHEzXe0KljbsdwTgPG5jCyhMmaA=='
使用 ast.literal_eval
import ast
ast.literal_eval(data)
感谢@juanpa.arrivillaga。我只是补充回答。
推荐阅读
- python - python 中 sin(45) 和 cos(45) 的不同值,尽管它们是等价的
- python - 在 Python 中绘制 3D 网格数据
- r - 在ggplot2中求和y轴
- c++ - 尝试修复 OpenGL 2D 中的精灵表像素出血导致精灵扭曲
- firebase - React-native await useEffect 函数
- c# - 容器化的 .net 核心应用程序无法连接到容器化的 mongo db
- java - Android SecretKey AES 和 JWK:如何转换
- arrays - useState 钩子在 setState 之后不断返回 initailState
- windows - “出了点问题”,Visual Studio 社区中的错误
- java - 使用 try-with-resources 或在“finally”子句中关闭此“语句”