Skip to main content

🌽💪 Cornflex 🌽💪

A lightweight SFTP reader built on top of paramiko and polars. Connects to remote servers and pulls files down as strings, Polars DataFrames, or raw text.


Installation

pip install paramiko polars chardet

Then drop cornflex/ into your project.


Usage

from cornflex import SFTPReader

Connect with password

reader = SFTPReader(
    hostname="sftp.example.com",
    username="myuser",
    password="mypassword",
)

Connect with PEM key

reader = SFTPReader(
    hostname="sftp.example.com",
    username="myuser",
    pem_file="/path/to/key.pem",
)

Methods

get_files(remote_path, file_pattern)

Lists files in a remote directory. Supports glob-style patterns.

reader.get_files(remote_path="/data", file_pattern="*.csv")
# ["orders_2024.csv", "users_2024.csv"]

get_csv_file(file_name, remote_path, column_names)

Fetches a CSV and returns it as a Polars DataFrame.

reader.connect()
df = reader.get_csv_file("orders.csv", remote_path="/data")

# Override column names (useful when file has no header)
df = reader.get_csv_file("orders.csv", remote_path="/data", column_names=["id", "amount", "date"])
reader.close()

get_xml_file_to_string(file_name, remote_path)

Fetches an XML file and returns it as a string.

reader.connect()
xml = reader.get_xml_file_to_string("feed.xml", remote_path="/exports")
reader.close()

file_to_string(file_name, remote_path, encoding)

Fetches any file as a string. Auto-detects encoding via chardet if not specified.

reader.connect()
content = reader.file_to_string("report.txt", remote_path="/reports")

# Force encoding
content = reader.file_to_string("report.txt", encoding="latin-1")
reader.close()

Notes

  • get_files() handles connect/close internally.
  • For all other methods, call connect() before and close() after.
  • Either password or pem_file must be provided — not both, not neither.
  • get_csv_file assumes UTF-8. Use file_to_string for other encodings.

Dependencies

Package Purpose
paramiko SSH/SFTP connection
polars DataFrame output
chardet Encoding detection

Metadata

Release files for cornflex 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cornflex 1.2.0
File Size Uploaded Provenance Actions
cornflex-1.2.0.tar.gz 37.3 kB Without provenance Details for cornflex-1.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for cornflex 1.2.0
File Interpreter ABI Platform Actions
cornflex-1.2.0-py3-none-any.whl Python 3 none any Details for cornflex-1.2.0-py3-none-any.whl

Total release size: 42.6 kB

Release files / cornflex-1.2.0.tar.gz

Download URL cornflex-1.2.0.tar.gz
Size 37.3 kB
Tags Source
SHA-256 checksum
How to use checksums
2205c8bca33cea733617d1e859cddbb673eb858a90308310f97ebf886ed6d97f
BLAKE2b-256 checksum
How to use checksums
a69210b30b76b2ebb76199062652bc7445eb85b7f3d697f13a4cff7330f47761
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / cornflex-1.2.0-py3-none-any.whl

Download URL cornflex-1.2.0-py3-none-any.whl
Size 5.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4e78de936826e118e5ddaba59ee1a9163410f2c65f378fb4305cc924e01c2e4b
BLAKE2b-256 checksum
How to use checksums
64b3594c917877c0fc3af880809fee06b5a3390a50f1d853b7171a2c9350c5d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Security for cornflex 1.2.0

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page