gpt4 book ai didi

Python 请求、CSV、Sha256 和 BOM

转载 作者:行者123 更新时间:2023-11-28 17:39:43 25 4
gpt4 key购买 nike

我正在使用 Requests 和 Python 2.7 为运动员收集一组 CSV。

Requests 表示,这些文件由 MSFT 报告服务器生成,并以 iso-8859-1 的形式通过。

因为我每晚都要处理数千个问题,所以我想对文件进行 sha256 运算并与运动员之前的哈希值进行比较。如果哈希匹配,我就不会费心将文件保存到磁盘。这些文件很小——最大的大约 6K——所以没有分块/流媒体问题。

然而,sha256 失败了,因为这些文件有一个讨厌的 BOM。我在这里查看了 10 种不同的“解决方案”,但找不到可以通过 decode.encode 提取 BOM 以便我可以执行 sha256 的解决方案。

我可能不得不恢复的一种解决方法是,我可以将文件写入磁盘,然后在那里进行 sha256。但这看起来真的很糟糕。

如果我能在一开始就去掉 BOM,我就会有一个与 sha256 一起工作的过程,让我免于处理多余的文件。

认为问题可能是我表面上尝试对什么是文件对象进行字符串操作。但由于该对象仍然是一个 u"/... 十六进制流,我认为这些操作会起作用...

详情如下:

>>> r = requests.get('http://66.73.188.164/ReportServer?%2fCPTC%2fWomens1stHalfDetail&Team=&player=17424&rs:Format=CSV')
>>> r.status_code
200
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x18afb70>
>>> r.encoding
'ISO-8859-1'
>>> print r.headers['content-type']
text/plain
>>> r.text[0]
u'\xff'

第一次尝试转换失败,无法使用指定的编码类型进行解码!

>>> z = r.text
>>> z.decode('iso-8859-1').encode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

事实上,z 的“类型”现在与预期不同,可能是因为 sys (mac; utf8)?

>>> type(z)
<type 'unicode'>
>>> z[0]
u'\xff'
>>> z[0:5]
u'\xff\xfem\x00a'

各种解码和编码的尝试都失败了;这是许多此类尝试之一。

>>> z.decode('utf-8-sig').encode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/encodings/utf_8_sig.py", line 22, in decode
(output, consumed) = codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

我确定答案是单行的;我只是没有看到它。非常感谢任何指导。

最佳答案

也许您可以尝试通过仅对文件的其余部分进行编码来获取 sha256 来省略 BOM?如:

z = r.text[2:]
z.decode ...

相同的逻辑必须应用于已存储在磁盘上的文件的哈希值,但这应该不是问题。

关于Python 请求、CSV、Sha256 和 BOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26203067/

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