Matching account by filename

67 views
Skip to first unread message

Zhuoyun Wei

unread,
Apr 4, 2019, 4:33:09 AM4/4/19
to Beancount
Hi,

the CSV importer determines the account to use by "regexps" parameter. I have two accounts from the same bank (one checking and one savings), and the CSV files of both are of the same format. There isn't anything in the file content that could tell the two accounts apart. The only difference is the file name (e.g. "Chase1111.csv" for checking, "Chase2222.csv" for savings).

Under this circumstance, "regexps" parameter does not work. How could I import different files into different accounts?

--
Zhuoyun Wei

Aamer Abbas

unread,
Apr 4, 2019, 11:36:01 AM4/4/19
to bean...@googlegroups.com
You can't do it with the CSV importer the way it's currently written. You will need to write your own importer.

Something like this, but obviously refactored in a nicer way.

    def extract(self, file):
        file_name = path.basename(file.name)

        if file_name == "something.csv":
            account = "Assets:US:Something"
        elif file_name == "something_else.csv"
            account = "Assets:US:SomethingElse"

--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To post to this group, send email to bean...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/17beda3b-4862-44e8-b839-51aaf6d573f8%40www.fastmail.com.
For more options, visit https://groups.google.com/d/optout.

Aamer Abbas

unread,
Apr 4, 2019, 11:38:39 AM4/4/19
to bean...@googlegroups.com
By the way, just wanted to note this is for extraction purposes since you need to use a different account based on the file name. If it's only for identification purposes, the identifier mixin already supports matching on the file name (https://bitbucket.org/blais/beancount/src/fa1edde3bcd02a277fac193f460a39c9a1461161/beancount/ingest/importers/mixins/identifier.py?at=default&fileviewer=file-view-default#identifier.py-32)

Zhuoyun Wei

unread,
Apr 5, 2019, 3:06:01 AM4/5/19
to Aamer Abbas, Beancount
Thanks. My current workflow is to use "bean-extract" to extract transactions from multiple CSV files downloaded from different institutions. I have been using this workflow for a few years, until recently I opened a savings account.

I will look into how to use the importer directly, instead of using "bean-extract".

--
Zhuoyun Wei

On Thu, Apr 4, 2019, at 11:38, Aamer Abbas wrote:
> By the way, just wanted to note this is for extraction purposes since
> you need to use a different account based on the file name. If it's
> only for identification purposes, the identifier mixin already supports
> matching on the file name
> (https://bitbucket.org/blais/beancount/src/fa1edde3bcd02a277fac193f460a39c9a1461161/beancount/ingest/importers/mixins/identifier.py?at=default&fileviewer=file-view-default#identifier.py-32)
>
> On Thu, Apr 4, 2019 at 6:35 PM Aamer Abbas <aa...@aamerabbas.com> wrote:
> > You can't do it with the CSV importer the way it's currently written. You will need to write your own importer.
> >
> > Something like this, but obviously refactored in a nicer way.
> >
> > def extract(self, file):
> > file_name = path.basename(file.name)
> >
> > if file_name == "something.csv":
> > account = "Assets:US:Something"
> > elif file_name == "something_else.csv"
> > account = "Assets:US:SomethingElse"
> >
> > On Thu, Apr 4, 2019 at 11:33 AM Zhuoyun Wei <wzy...@wzyboy.org> wrote:
> >> Hi,
> >>
> >> the CSV importer determines the account to use by "regexps" parameter. I have two accounts from the same bank (one checking and one savings), and the CSV files of both are of the same format. There isn't anything in the file content that could tell the two accounts apart. The only difference is the file name (e.g. "Chase1111.csv" for checking, "Chase2222.csv" for savings).
> >>
> >> Under this circumstance, "regexps" parameter does not work. How could I import different files into different accounts?
> >>
> >> --
> >> Zhuoyun Wei
> >>
> >> --
> >> You received this message because you are subscribed to the Google Groups "Beancount" group.
> >> To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com <mailto:beancount%2Bunsu...@googlegroups.com>.
> >> To post to this group, send email to bean...@googlegroups.com.
> >> To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/17beda3b-4862-44e8-b839-51aaf6d573f8%40www.fastmail.com.
> >> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to beancount+...@googlegroups.com.
> To post to this group, send email to bean...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/CAOHSxbnuC06TGuyP9C2a_1dZM_znUYfHuJMhSRNqjPByHc%3D7Lw%40mail.gmail.com <https://groups.google.com/d/msgid/beancount/CAOHSxbnuC06TGuyP9C2a_1dZM_znUYfHuJMhSRNqjPByHc%3D7Lw%40mail.gmail.com?utm_medium=email&utm_source=footer>.

Martin Blais

unread,
Apr 5, 2019, 6:51:18 AM4/5/19
to Beancount
Customize the class to make identify() match on file.name rather than the content and create two instances with different account names.

Aamer Abbas

unread,
Apr 5, 2019, 5:43:09 PM4/5/19
to Zhuoyun Wei, Beancount
No problem. Just to be clear, your new importers should still work using bean-extract. Your usage should remain identical - the only thing that will change is the code that is used to do the extraction.
Reply all
Reply to author
Forward
0 new messages