Contents
- This is not a production-ready library.
- I'm not a production-ready Rust programmer.
- Either Python 3's
csv
stdlib module is pretty %#!& fast or my Rust code is %#!& slow.
pip install rustcsv
import tempfile
from rustcsv import CSVReader
# Create a temporary file to put our CSV content in,
# automatically delete it once we're done.
with tempfile.NamedTemporaryFile(mode="w") as writable_fd:
writable_fd.write(
"""\
spam1,spam2,spam3
spam4,spam5,spam6
"""
)
writable_fd.flush()
for row_number, row in enumerate(CSVReader(writable_fd.name), start=1):
print(
"row #{row_number}: {row}".format(row_number=row_number, row=row)
)
# Prints:
# row #1: ("spam1", "spam2", "spam3")
# row #2: ("spam4", "spam5", "spam6")
examples/reader_from_file_object.py:
import tempfile
from rustcsv import CSVReader
# Create a temporary file to put our CSV content in,
# automatically delete it once we're done.
with tempfile.NamedTemporaryFile(mode="w") as writable_fd:
writable_fd.write(
"""\
spam1,spam2,spam3
spam4,spam5,spam6
"""
)
writable_fd.flush()
readable_fd = open(writable_fd.name, "rb")
for row_number, row in enumerate(CSVReader(readable_fd), start=1):
print(
"row #{row_number}: {row}".format(row_number=row_number, row=row)
)
# Prints:
# row #1: ("spam1", "spam2", "spam3")
# row #2: ("spam4", "spam5", "spam6")
Install and build the extension locally from e.g. a git checkout.
- Pipenv.
- Python 3.6.
- Rust and Cargo nightly (1.30 as of now) - https://rustup.rs/.
pipenv install --dev
Either
Using the "debug" cargo profile, or
make develop-debug
Using the "release" cargo profile
make develop-release
make test
make benchmark
Note: make benchmark
will always build the extension using the "release"
cargo profile.
Benchmarks are executed as the last step in the Travis CI project.
You can also run it yourself, see Development and Run benchmarks.