跳转到主要内容

一个受Rust的std::io::Cursor启发的零拷贝文件包装器,用于字节缓冲区。

项目描述

io‸cursor

一个零拷贝文件包装器,用于Python字节缓冲区,受Rust的std::io::Cursor启发。

Actions Coverage PyPI Wheel Python Versions Python Implementations License Source GitHub issues Downloads Changelog

🗺️ 概览

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-pp39-pypy39_pp73-win_amd64.whl (23.1 kB 查看哈希)

上传时间: PyPy Windows x86-64

iocursor-0.1.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (19.8 kB 查看哈希)

上传时间: PyPy macOS 10.9+ x86-64

iocursor-0.1.4-pp38-pypy38_pp73-win_amd64.whl (23.1 kB 查看哈希)

上传于 PyPy Windows x86-64

iocursor-0.1.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (19.8 kB 查看哈希)

上传于 PyPy macOS 10.9+ x86-64

iocursor-0.1.4-pp37-pypy37_pp73-win_amd64.whl (23.1 kB 查看哈希)

上传于 PyPy Windows x86-64

iocursor-0.1.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (19.8 kB 查看哈希)

上传于 PyPy macOS 10.9+ x86-64

iocursor-0.1.4-cp311-cp311-win_amd64.whl (23.0 kB 查看哈希)

上传于 CPython 3.11 Windows x86-64

iocursor-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.1 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

iocursor-0.1.4-cp311-cp311-macosx_10_9_universal2.whl (29.4 kB 查看哈希)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

iocursor-0.1.4-cp310-cp310-win_amd64.whl (23.0 kB 查看哈希)

上传于 CPython 3.10 Windows x86-64

iocursor-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.0 kB 查看哈希)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

iocursor-0.1.4-cp310-cp310-macosx_10_15_x86_64.whl (20.8 kB 查看哈希)

上传于 CPython 3.10 macOS 10.15+ x86-64

iocursor-0.1.4-cp39-cp39-win_amd64.whl (23.0 kB 查看哈希)

上传于 CPython 3.9 Windows x86-64

iocursor-0.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.6 kB 查看哈希)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

iocursor-0.1.4-cp39-cp39-macosx_10_15_x86_64.whl (20.8 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.15+ x86-64

iocursor-0.1.4-cp38-cp38-win_amd64.whl (23.0 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

iocursor-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.0 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

iocursor-0.1.4-cp38-cp38-macosx_10_15_x86_64.whl (20.8 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.15+ x86-64

iocursor-0.1.4-cp37-cp37m-win_amd64.whl (23.0 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

iocursor-0.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.3 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64

iocursor-0.1.4-cp37-cp37m-macosx_10_15_x86_64.whl (20.8 kB 查看哈希值)

上传于 CPython 3.7m macOS 10.15+ x86-64

iocursor-0.1.4-cp36-cp36m-win_amd64.whl (24.2 kB 查看哈希值)

上传于 CPython 3.6m Windows x86-64

iocursor-0.1.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.3 kB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ x86-64

iocursor-0.1.4-cp36-cp36m-macosx_10_14_x86_64.whl (20.7 kB 查看哈希值)

上传于 CPython 3.6m macOS 10.14+ x86-64

iocursor-0.1.4-cp35-cp35m-win_amd64.whl (24.2 kB 查看哈希)

上传于 CPython 3.5m Windows x86-64

iocursor-0.1.4-cp35-cp35m-macosx_10_14_x86_64.whl (20.6 kB 查看哈希)

上传于 CPython 3.5m macOS 10.14+ x86-64

支持