Skip to content

Instantly share code, notes, and snippets.

@travisdahlke
Created November 7, 2014 18:57
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save travisdahlke/71152286b0a8826249fe to your computer and use it in GitHub Desktop.
Save travisdahlke/71152286b0a8826249fe to your computer and use it in GitHub Desktop.
Ledger to Beancount
#!/usr/bin/python
import ledger
import sys
import re
def account_name(post):
account = post.account.fullname().replace(" ","").replace("(","").replace(")","").replace("'","")
return re.sub(r'\:(\d)',r':X\1', account)
def get_symbol(amount):
symbol = amount.commodity.symbol.replace("-","").replace("\"","").upper()
if symbol == "$":
symbol = "USD"
return symbol
filename = sys.argv[1]
accounts = set()
for xact in ledger.read_journal(filename).xacts():
for post in xact.posts():
account = account_name(post)
if account not in accounts:
print "%s open %s" % (xact.date, account)
accounts.add(account)
print "%s * \"%s\"" % (xact.date, xact.payee)
for post in xact.posts():
account = account_name(post)
symbol = get_symbol(post.amount)
if post.amount.has_annotation():
price = post.amount.price()
if post.amount.number() != 0:
price = price / post.amount.number()
psym = get_symbol(price)
print " %-50s %s %s @ %s %s" % (account, post.amount.number(), symbol, price.number(), psym)
else:
print " %-50s %s %s" % (account, post.amount.number(), symbol)
@brunov25
Copy link

proposal: in line 9 insert a new line with
account = account.title() # to force capitalization of the account names

@jan-loeffler
Copy link

Does somebody know how to include tags ?

@glasserc
Copy link

This solution drops some features of my ledger file that I find quite important -- namely, comments and balance assertions. To address this, I wrote another ledger-to-beancount converter which works syntactically.

@zacchiro
Copy link

zacchiro commented Apr 6, 2018

You might want to check ledger2beancount, which is feature-complete w.r.t. ledger functionalities that can be faithfully supported in beancount.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment