gpt4 book ai didi

python - 如何在 python 中编写自定义编码来清理我的数据?

转载 作者:行者123 更新时间:2023-11-28 16:52:07 25 4
gpt4 key购买 nike

我知道我以前在另一份工作中做过这件事,但我不记得我做了什么。

我有一个数据库,其中充满了从 Office、网页以及谁知道其他地方剪切和粘贴的 varchar 和备注字段。这开始对我造成编码错误。由于 Python 有一个非常好的“解码”函数来获取字节流并将其转换为 Unicode,我认为只需编写我自己的编码即可解决此问题。 (例如,将“智能引号”变成“标准引号”。)

但我不记得如何开始。我想我复制了一个接近的编码 (cp1252.py) 然后更新了它。

任何人都可以让我走上正确的道路吗?或者建议更好的路径?

最佳答案

我对此进行了更详细的扩展。

如果您相当确定数据库中文本的编码,您可以执行 text.decode('cp1252') 来获取 Unicode 字符串。如果猜测是错误的,这可能会出现异常,或者解码器会“消失”一些字符。

按照您描述的方式创建解码器(修改 cp1252.py)很容易。您只需要定义从字节到 Unicode 字符的转换表。

然而,如果不是数据库中的所有文本都具有相同的编码,您的解码器将需要一些规则来决定哪个是正确的映射。在这种情况下,您可能想要平底船并使用 chardet module , 它可以扫描文本并猜测编码。

也许最好的方法是尝试使用最可能的编码 (cp1252) 进行解码,如果失败,则回退到使用 chardet 来猜测正确的编码。

如果您使用 text.decode() 和/或 chardet,您将得到一个 Unicode 字符串。下面是一个简单的例程,可以翻译 Unicode 字符串中的字符,例如“将大引号转换为 ASCII”:

CHARMAP = [
(u'\u201c\u201d', '"'),
(u'\u2018\u2019', "'")
]

# replace with text.decode('cp1252') or chardet
text = u'\u201cit\u2019s probably going to work\u201d, he said'

_map = dict((c, r) for chars, r in CHARMAP for c in list(chars))
fixed = ''.join(_map.get(c, c) for c in text)
print fixed

输出:

"it's probably going to work", he said

关于python - 如何在 python 中编写自定义编码来清理我的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com