没有项目描述

wick的Python项目详细描述


wick

灯芯

Python 3.6PyPI versionBuild Status

wick是一个python命令行工具,它自动生成用于处理二进制数据的文件i/o源代码。

为什么?

我正在做一个涉及到逆向工程文件格式的项目,我发现大多数数据结构往往由几个简单的数据结构组成。我还注意到,更简单的结构都是非常典型的。所以我创建了这个工具来为我编写简单的结构,我可以做更有趣的工作,将它们组合成更大的结构。

支持的目标语言

  • C
  • javascript
  • Python

安装

$ pip install wick

用法

$ wick example.h Python

它到底做了什么?

让我们看一个具体的例子。

假设我们有一个二进制数据,它是由一个字符串名和一个整数id表示的一系列记录。首先,我们创建一个record.h文件,该文件包含此数据的c结构表示:

// record.h// Simple RecordstructRecord{// Record namecharname[64];// Record id.unsignedcharid;};

然后对文件运行wick

$ wick record.h Python

然后将创建一个record.py文件,其内容如下:

# record.pyimportstructclassRecord:"""Simple Record object    Attributes:        name: Record name        id: Record id.    """format='<64sB'size=struct.calcsize(format)__slots__=('name','id')def__init__(self,name,id):self.name=name.split(b'\x00')[0].decode('ascii')iftype(name)isbyteselsenameself.id=id@classmethoddefwrite(cls,file,record):record_data=struct.pack(cls.format,record.name.encode('ascii'),record.id)file.write(record_data)@classmethoddefread(cls,file):record_data=file.read(cls.size)record_struct=struct.unpack(cls.format,record_data)returnRecord(*record_struct)

然后我们可以将这段代码导入到python中,do work

读取数据

withopen(path,'rb')asfile:rec=Record.read(file)

写入数据

withopen(path,'wb')asfile:rec=Record(b'name',0)Record.write(file,rec)

打开大量数据

importstruct# Assuming the file only contains Record datawithopen(path,'rb')asfile:recs=[Record(*chunk)forchunkinstruct.iter_unpack(Record.format,file.read())]

贡献

有一个错误修复或一个新的功能,你想看到在威克?把它送到我们这边!请确保您创建了一个问题来解决您的修复/功能,以便我们可以讨论您的贡献。

  1. 离开这个回购协议!
  2. 创建功能分支:git checkout -b features/add-javascript-code-generator
  3. 提交更改:git commit -m 'Implemented Javascript code generator'
  4. 推动分支:git push origin add-javascript-code-generator
  5. 提交请求。
  6. 创建一个issue

许可证

麻省理工学院

全文见license文档。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中