一个受Rust的std::io::Cursor启发的零拷贝文件包装器,用于字节缓冲区。
项目描述
io‸cursor
一个零拷贝的文件包装器,用于Python的字节缓冲区,受Rust的std::io::Cursor
启发。
🗺️ 概览
iocursor.Cursor
允许您包装一个分配的缓冲区(即实现缓冲区协议的Python对象),并通过文件对象API与之交互。它与io.BytesIO
有一些共同点,但有以下主要区别
- 零拷贝 VS 拷贝:在初始化时,
Cursor
不会复制你给它提供的数据,而BytesIO
会。这使得当你在进行只读操作时,Cursor
更加高效。 - 静态 VS 可增长:
Cursor
只会使用你在静态内存中提供的缓冲区,而BytesIO
会使用其专用的、可增长的缓冲区。
🔧 安装
直接从PyPI安装,使用pip
$ pip install iocursor
预构建的轮子适用于所有支持的Python3版本在Linux和OSX上。否则,仅需要可工作的C编译器即可从源码构建。
🧶 线程安全
iocursor.Cursor
实例不是线程安全的。当只使用相同后端内存的几个Cursor
实例进行读取时应该没问题。否则,请使用锁。
💡 例子
- 当你需要将
bytes
传递给只接受文件对象的接口时,请使用iocursor.Cursor
。例如,将从base64解码的PNG图像传递给PIL,而不进行拷贝。import base64 from iocursor import Cursor from PIL import Image imgdata = base64.b64decode("iVBORw0KGgoAAAANSUhEU...") img = Image.open(Cursor(imgdata))
- 当你想使用文件API将数据写入已知大小的缓冲区时,请使用
iocursor.Cursor
。例如,使用pysmb
API检索文件,该API只接受文件对象。from SMB.SMBConnection import SMBConnectSMBConnection smb = SMBConnection('guest', '', 'client', 'server') smb.connect("192.168.0.1") info = smb.getAttributes("Music", "The Clash/Rock the Casbah.mp3") cursor = Cursor(bytearray(shared_file.file_size)) smb.retrieveFile("Music", "The Clash/Rock the Casbah.mp3", cursor) buffer = cursor.getvalue()
- 当你想在实现了缓冲区协议的类型上执行直接I/O时,请使用
iocursor.Cursor
。例如,通过向其中写入字节来初始化numpy
数组。import numpy array = numpy.empty(4, dtype="int16") cursor = Cursor(array) cursor.write(b"\x01\x00\x02\x00\x03\x00\x04\x00") print(array) # array([1, 2, 3, 4], dtype=int16)
💭 反馈
⚠️ 问题追踪器
发现了一个错误?有一个增强请求?如果你需要报告或询问问题,请访问GitHub问题追踪器。如果你正在提交错误报告,请尽可能提供有关问题的详细信息,并尝试在简单、易于复现的情况下重现相同的错误。
🏗️ 贡献
欢迎贡献力量!有关更多详细信息,请参阅CONTRIBUTING.md
。
⚖️ 许可证
此库根据MIT许可证提供。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码发行版
iocursor-0.1.4.tar.gz (16.9 kB 查看哈希)
构建发行版
iocursor-0.1.4-cp311-cp311-win_amd64.whl (23.0 kB 查看哈希)
iocursor-0.1.4-cp310-cp310-win_amd64.whl (23.0 kB 查看哈希)
iocursor-0.1.4-cp39-cp39-win_amd64.whl (23.0 kB 查看哈希)
iocursor-0.1.4-cp38-cp38-win_amd64.whl (23.0 kB 查看哈希值)
iocursor-0.1.4-cp37-cp37m-win_amd64.whl (23.0 kB 查看哈希值)
iocursor-0.1.4-cp36-cp36m-win_amd64.whl (24.2 kB 查看哈希值)
iocursor-0.1.4-cp35-cp35m-win_amd64.whl (24.2 kB 查看哈希)
关闭
iocursor-0.1.4.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 98ad5b336429d5cd38535a805a2cb537e22804c26cf595352f4459150fc68f95 |
|
MD5 | 1612c45c3fd0cc5192444b07411eaf6f |
|
BLAKE2b-256 | a5d755f7a6fb6afabb98cae75a7ce4ebdba8364a4bfab5ac58bf73ba505b7efa |
关闭
iocursor-0.1.4-pp39-pypy39_pp73-win_amd64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fed703a01bbb1729ecf5f58cfb6e6228ea8d8afab261bc3526252c850fa15c37 |
|
MD5 | 088d2219c03fafc5d25c78cd68d39edc |
|
BLAKE2b-256 | a48fd5f1330ef252a34598396db7c069bd6598e6f91ad55711e36a8d48e5c766 |
关闭
iocursor-0.1.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 67cf3e59f1d29a2fee1488645003d0d5bea094be5d008e050817da900d1f8617 |
|
MD5 | f0684bd44ddfad974b08fbef49fc0665 |
|
BLAKE2b-256 | 3777c50f723daaaf0262ede4d5081dd9b8a9005e791f9c2edd0029235eb34544 |
关闭
iocursor-0.1.4-pp38-pypy38_pp73-win_amd64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f0ec8157fd44d471819b029f5583b7696198581ab154f3b6afb4251abba3ba48 |
|
MD5 | 2793af5ac14dbec9e299a48aa28d495d |
|
BLAKE2b-256 | 0e9ceaeacaaccb30593815f6921452e3368ecfe609ce122af13189e1ba59fe1d |
关闭
iocursor-0.1.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ece32ac5e4bd633dd79ea972a7f87a6a122ccf30317e74f9acc09a8cd706991e |
|
MD5 | 2aa597c12b6d7c96728bcbae0de745b9 |
|
BLAKE2b-256 | b9e499769c630f86c6972b4edbdb78812754661592c50233516526701342a8eb |
关闭
iocursor-0.1.4-pp37-pypy37_pp73-win_amd64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5e327b96a8c27dc7a9369ed4f9e6f88729d8e57c3284d2d77e04a3cbcfe5c647 |
|
MD5 | 80fc0edeee5cfe357e8c290bde841a0a |
|
BLAKE2b-256 | afad135ba26167b7e1731fb741620d4f150fe8e847425d4e1e7c969dcf66189a |
关闭
iocursor-0.1.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 314abb68f01dd726dcf38e3801e8dd407105d4bf59483d3fd96d4db35a0fc830 |
|
MD5 | 5626d563254adc8c2fff3d0fafadd20e |
|
BLAKE2b-256 | 918b49229f9cfb06d101a353af0cf0001eb4af8f05c0ea5e88c74b410c4f602f |
关闭
iocursor-0.1.4-cp311-cp311-win_amd64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 152e1619baab9373f54b6da9b50ef56e432ec1f8e9539199499215e96a89335e |
|
MD5 | 11c975103f183ecc980bfa38d524fb63 |
|
BLAKE2b-256 | d21d1d0206545da7f12ef79c50f4b3ae9d17d33cd4a2af548cd191c6ec394a67 |
关闭
iocursor-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3eb9de1ea3f766446cf1df06095414b898d0269a9ad1373fd60b4ce807a9acfa |
|
MD5 | c8d9c157aab0e4e07c0d6e660252cb22 |
|
BLAKE2b-256 | 857e34b87bae3b06efc4e708d82e75b530c3130db5603c6b7c8f8948b1687dc4 |
关闭
iocursor-0.1.4-cp311-cp311-macosx_10_9_universal2.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dd3fbde34c0b82673fd88c7fff0f39cd5edf1b917450fce68b839af526713b70 |
|
MD5 | ef9b682d198b3d7a019249ef571571e9 |
|
BLAKE2b-256 | f623a3d54f9b659294dc017d8c8c083d97a5ea07015d180f30d7c81d77c88aa1 |
关闭
哈希值 用于 iocursor-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a0e9033be2c3d7ac07f91e5ed98f4eedc0961749a6dbf5cf9b8abd1f81ff9d9e |
|
MD5 | f9c1222737faaa893e7d5812261685d3 |
|
BLAKE2b-256 | b7843532f8daf98fff92687cc72218a15dfa347497de5c38e020c520f9be613c |
关闭
哈希值 用于 iocursor-0.1.4-cp310-cp310-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4e1d50c3d33a88f8c42da7b900e9cb3626b82f4b87b1e0d5217a51ce6c8b62ba |
|
MD5 | 81bb13b9438fa1e4047065c8ed66aca2 |
|
BLAKE2b-256 | 0a159de063d950435dd60f5d4739f8414fec402825163b37e07ebfd48c2ecd19 |
关闭
哈希值 用于 iocursor-0.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 41b7862b26d631f94785db88288e46d5ecb9a218b9da64aca572200bd4843e92 |
|
MD5 | 809ff464ebd08dbc3fb90725f589f285 |
|
BLAKE2b-256 | 79e2bd13cb38a11add6cdf51004b92aa1acdfebdc86d76fa4ae77feac277ef89 |
关闭
哈希值 用于 iocursor-0.1.4-cp39-cp39-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 37758b3b08e2ee79f886f0a8e633ff417c358ba834ac3f1ad64ce85975dd0125 |
|
MD5 | df2372bc10d3bac3864b64bd87de09ae |
|
BLAKE2b-256 | 0c50f70bfbf2a2fe0126d62acc74e98d06795be6402c10a77ec6ae4661f11b67 |
关闭
哈希值 用于 iocursor-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0488c929beb723c9f9c000f875675e7b72422e8f07c32ecdca0f2e8a0034d6d7 |
|
MD5 | 6f0dea2030427c1434f153773203ac17 |
|
BLAKE2b-256 | 709ef501a7e848499b95ecc47e4220c972b9d49c45d857ad24072d7c426dca29 |
关闭
哈希值 用于 iocursor-0.1.4-cp38-cp38-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 07ee01205680c91f4f8bbdac12705b2eb0f47ed9c6ad7a31a37f10adabd5e289 |
|
MD5 | 87dac3ca370bfc87d0236c8d4645e858 |
|
BLAKE2b-256 | d8e6f125c4abb604968744c9448b5705aa65732221ac5e06cecf034fbcf33cd7 |
关闭
哈希值 用于 iocursor-0.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f56ea91d08455889e89b23d977071bee9aee0aab20c6bb2b4569ce21b06df3d |
|
MD5 | 6e8713d3102e788e6aedeac7e9a69b46 |
|
BLAKE2b-256 | c412f7522e0ce5dc5d15c0864b9773105140fc160007d63542111f8188f10de3 |
关闭
哈希值 用于 iocursor-0.1.4-cp37-cp37m-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cc263e97b9edb5f685c37466eb69eed7e0f15f655da0e44f3d035fffd6c72a41 |
|
MD5 | 25dfa56893713189151591a87b437989 |
|
BLAKE2b-256 | 405a3cd865cd2e02bfd732f64ee110f1ad5a85d8b565409264f45924637901eb |
关闭
哈希值 用于 iocursor-0.1.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1eb655bb7e295fb4bf2d6a8e33eee265d724bae0ae8ae04f733e4da05fa2d203 |
|
MD5 | 96ba66e5d80233dabf668507fb5a0aaf |
|
BLAKE2b-256 | 52f905115a2e3f1d0a03755d2cc6c545eb660e5b3126f4c361886583c8d5f038 |
关闭
哈希值 用于 iocursor-0.1.4-cp36-cp36m-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b84d0634aff542a836aedece5709f34d316296da4c88903fed9425b7fa781e80 |
|
MD5 | 54f4004414847c081e1a296a35c1ac16 |
|
BLAKE2b-256 | 3db4ab38eb48262eb6cfe0511c77ed5c65157b9db8c4c6076b8ca798ef315834 |
关闭
哈希值 用于 iocursor-0.1.4-cp35-cp35m-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4770a8561248a4febccadd520f7c7e47d6ade2e3f7984a07d284bdc281da4f97 |
|
MD5 | f57d2040425cc524da875f5cbee68446 |
|
BLAKE2b-256 | 16d4d6a07fd12e525e57e7c749d68d8c023439fb8b7aecfcc2ed684ab35277e5 |