reprb
Represent bytes with printable characters, similar to how python built-in functions repr() and eval() do.
why
Bytes objects in Python 3 can already be read from and written to files (like load/dump), but you can't easily understand or edit them when you open a binary file directly in a text editor.
reprb's goal is to dump bytes to printable bytes and load them back to the original bytes object quickly (at least faster than the built-in repr()), especially when you analysis/dump/load bytes contain both printable and unprintable characters(like http message), reprb make it more editable and understandable.
how
Install
from pip
python3 -m pip install reprb
from source
git clone git@github.com:Testzero-wz/reprb.git
cd reprb && pip3 install .
Usage
repr bytes object:
>>> from reprb import reprb, evalb
>>> msg = "abc123\x00\x07\x11\x90\xff中文№".encode()
>>> repr_bytes = reprb(msg)
>>> repr_bytes
b'abc123\\0\\a\\x11\\xc2\\x90\\xc3\\xbf\\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe2\\x84\\x96'
>>> eval_bytes = evalb(repr_bytes)
>>> eval_bytes == msg
True
dump/load bytes from/to file:
from reprb import dump, load, load_iter
dump_bytes = b"abc123\x00\x07\x84\x96"
dump_file = "dump.txt"
# dump bytes to file, seperate by "\n" default
with open(dump_file, "wb") as f:
# dump bytes object
dump(dump_bytes, f)
# dump all bytes object in list
dump_bytes_list = [dump_bytes, dump_bytes, dump_bytes]
dump(dump_bytes_list, f)
# load all bytes from file, seperate by "\n" default
load_bytes_from_path = load(dump_file)
# load all bytes from file handler
with open(dump_file, "rb") as f:
load_bytes_from_file = load(f)
# load iter
load_bytes_from_iter = list(load_iter(dump_file))
assert (
[dump_bytes] + dump_bytes_list
== load_bytes_from_path
== load_bytes_from_file
== load_bytes_from_iter
)
If you want to store bytes with a more formatable structure like json:
from reprb import reprb, evalb
# you should decode reprb bytes since json.dump() only accept string object.
# btw, you can decode reprb(msg) bytes safely, because eprb(msg) bytes only contain ascii printable chars
stru = {
"msg": reprb(http_msg).decode(),
"extra_info": "whatever",
}
json.dump(stru)
Benchmark
$ python3 test.py
Test:
(6/6) Testcases passed.
dump/load test passed.
Bench:
built-in repr: 1.2180822410s, 183074666.47 bytes/s
built-in eval: 4.8808067660s, 131310258.88 bytes/s
reprb/dumpb: 0.7567997570s, 294661828.23 bytes/s
evalb/loadb: 1.2524397970s, 491999696.49 bytes/s
Metadata
Release files for reprb 1.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| reprb-1.0.8.tar.gz | 7.2 kB | Without provenance | Details for reprb-1.0.8.tar.gz |
Release files / reprb-1.0.8.tar.gz
| Download URL | reprb-1.0.8.tar.gz |
|---|---|
| Size | 7.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f2a956d5836260d09b6db6b2441a80da13263c2727600ddc2b23018aec0e5598
|
|
BLAKE2b-256 checksum How to use checksums |
62a42607fd041af9849c7dc3c4bcaf8c4647e294f3f2fe50c49601bde1a82e88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.0 CPython/3.8.10
|
Security for reprb 1.0.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.