.. content
Quiffen is a Python package for parsing QIF (Quicken Interchange Format) files.
The package allows users to both read QIF files and interact with the contents, and also to create a QIF structure and then output to either a QIF file, a CSV of transaction data or a pandas DataFrame.
QIF is an old file type, but has its merits because:
It's standardised (apart from dates, but that can be dealt with)
It's written in plain text
Here's an example parsing of a QIF file:
from quiffen import Qif, QifDataType import decimal qif = Qif.parse('test.qif', day_first=False) qif.accounts {'Quiffen Default Account': Account(name='Quiffen Default Account', desc='The default account created by Quiffen when no other accounts were present')} acc = qif.accounts['Quiffen Default Account'] acc.transactions {'Bank': TransactionList(Transaction(date=datetime.datetime(2021, 2, 14, 0 , 0), amount=decimal.Decimal(150.0), ...), ...), 'Invst': TransactionList(...)} tr = acc.transactions['Bank'][0] print(tr) Transaction: Date: 2020-02-14 00:00:00 Amount: 67.5 Payee: T-Mobile Category: Cell Phone Split Categories: ['Bills'] Splits: 2 total split(s) qif.categories {'Bills': Category(name='Bills), expense=True, hierarchy='Bills'} bills = qif.categories['Bills'] print(bills.render_tree()) Bills (root) └─ Cell Phone df = qif.to_dataframe(data_type=QifDataType.TRANSACTIONS) df.head() date amount payee ... memo cleared check_number 0 2020-02-14 67.5 T-Mobile ... NaN NaN NaN 1 2020-02-14 32.0 US Post Office ... money back for damaged parcel NaN NaN 2 2020-12-02 -10.0 Target ... two transactions, equal NaN NaN 3 2020-11-02 -25.0 Walmart ... non split transaction X 123.0 4 2020-10-02 -100.0 Amazon.com ... test order 1 * NaN ...
And here's an example of creating a QIF structure and exporting to a QIF file:
import quiffen from datetime import datetime qif = quiffen.Qif() acc = quiffen.Account(name='Personal Bank Account', desc='My personal bank account with Barclays.') qif.add_account(acc) groceries = quiffen.Category(name='Groceries') essentials = quiffen.Category(name='Essentials') groceries.add_child(essentials) qif.add_category(groceries) tr = quiffen.Transaction(date=datetime.now(), amount=150.0) acc.add_transaction(tr, header=quiffen.AccountType.BANK) qif.to_qif() # If a path is provided, this will save the file too! '!Type:Cat\nNGroceries\nETrue\nIFalse\n^\nNGroceries:Essentials\nETrue\nIFalse\n^\n!Account\nNPersonal Bank Account\nDMy personal bank account with Barclays.\n^\n!Type:Bank\nD02/07/2021\nT150.0\n^\n'
Documentation can be found at: https://quiffen.readthedocs.io/en/latest/
Install Quiffen by running:
pip install quiffen
pandas <https://pypi.org/project/pandas/>
_ (optional) for exporting to DataFrames
to_dataframe()
method will not work without pandas installed.MemorizedTransaction
object present in QIF files.GitHub pull requests welcome, though if you want to make a major change, please open an issue first for discussion.
If you are having issues, please let me know.
The project is licensed under the GNU GPLv3 license.