Skip to main content
Help the Python Software Foundation raise $60,000 USD by December 31st!  Building the PSF Q4 Fundraiser

Parser and query API for bank CSV account transactions

Project description

Elv

Wheel Status

Elv is a small module for parsing bank transactions from CSV files and performing queries on the data.

It currently only supports one bank, Jæren Sparebank, but I’ll add support for other banks whenever I get an example dump of their format. Send pull requests if you have them at https://github.com/cslarsen/elv/.

Norwegian short description

Elv er en Python modul for å lese banktransaksjoner eksportert fra banken din som en CSV-fil. Foreløpig er det kun Jæren Sparebank som jeg vet er støttet, men du kan nok ganske enkelt legge til lesere for andre format. Send meg gjerne eksempler på andre format!

Features

  • Parses CSV file from bank containing transactions
  • Money is stored in exact decimals
  • Contains a simple Python query API for sorting through large collections of transactions.
  • Can optionally put transactions in an in-memory SQLite3 database for even better queries.

Elevator pitch

Here’s how easy it is to use elv:

>>> from datetime import date
>>> import elv
>>> trans = elv.parse("data.csv")
>>> trans
<Transactions:453 items from 2009-01-27 to 2015-03-20>
>>> trans[0].amount
Decimal('300.00')
>>> trans.range(date(2015,1,1), date(2015,3,1))
<Transactions:15 items from 2015-01-02 to 2015-02-20>
>>> trans.range(date(2015,1,1), date(2015,3,1)).total()
Decimal('4500.00')

Instructions for Jæren Sparebank

Use the “export data” feature in the online bank, and you should be able to parse the file using Elv. I’ve seen other online banks having similar features, so please send me examples of other formats and I’ll add them.

Installation

You can install from setup.py:

$ python setup.py install # you may have to run as sudo

or from PyPI:

$ pip install elv

Example usage

If you have the bank account transactions in a file called data.csv, you can simply do:

$ python
>>> import elv
>>> transactions = elv.parse("data.csv")
>>> transactions
<Transactions:400 items from 2009-01-27 to 2014-09-29>
>>> transactions[0]
<Transaction:2014-09-29 2014-09-29 -2677.00  29519.13 'Vacation'>
>>> transactions[0].xfer
datetime.date(2014, 9, 29)
>>> transactions[0].posted
datetime.date(2014, 9, 29)
>>> transactions[0].amount
Decimal('-2677.00')

You can also get an in-memory SQLite3 database by doing:

>>> db = transactions.to_sqlite3()
>>> db
<sqlite3.Connection object at 0x10f31e200>
>>> db.execute("SELECT * FROM Transactions").next()
(0, datetime.date(2014, 9, 29), datetime.date(2014, 9, 29),
 u'Vacation', Decimal('-2677'), Decimal('29519.13'))

The CSV File Format

The CSV file should be a plain text file with the ISO-8859-1 encoding (aka Latin1). It looks like this:

"31-12-2014";"31-12-2014";"Test 1";"-497,78";"5.520,09"
"30-12-2014";"31-12-2014";"Test 2";"-100,00";"6.017,87"
"30-12-2014";"31-12-2014";"Test 3 --æøåÆØÅ--";"-145,47";"6.117,87"
"30-12-2014";"30-12-2014";"Test 4";"-457,24";"6.263,34"
"29-12-2014";"29-12-2014";"Test 5";"-108,30";"6.720,58"

The fields are as follows:

  • Date when the transaction was placed, in format "DD-MM-YYYY".
  • Date when the transaction was posted (“bokført”).
  • A message associated with the transaction, set by the one making the transaction.
  • The amount deposited or deducted from the account in NOK (Norwegian kroner) in format "-123,45", always two decimals and an optional sign.
  • The balance of your account after this transaction was completed.

The file itself contains no headers, and can contain many such transactions, one per line.

License

Copyright (C) 2015 Christian Stigen Larsen

Licensed under Affero GPL v3 or later; see http://www.gnu.org/licenses/agpl-3.0.html

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for elv, version 1.0.5
Filename, size File type Python version Upload date Hashes
Filename, size elv-1.0.5-py2.py3-none-any.whl (9.1 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size elv-1.0.5.tar.gz (20.6 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page