Created
November 26, 2015 11:01
-
-
Save tobyspark/70fb97fce866afd1555b to your computer and use it in GitHub Desktop.
PayPal exports transactions with Gross, Fee, Net in the same line item. Accounting software often needs to treat Fee as a separate line item. This script parses the PayPal export and separates out these, keeping the running balance true.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import sys | |
import csv | |
import locale | |
if __name__ == '__main__': | |
""" | |
PayPal exports transactions with Gross, Fee, Net in the same line item. | |
Accounting software often needs to treat Fee as a separate line item. | |
This script parses the PayPal export and separates out these, keeping the running balance true. | |
It expects downloads from the following in your PayPal account | |
Activity -> Download -> Comma delimited, balance affecting payments | |
""" | |
if (len(sys.argv) < 2): | |
sys.exit('Missing input file') | |
if (len(sys.argv) < 3): | |
sys.exit('Missing output file') | |
# needed to parse numbers with comma as thousand separator | |
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') | |
# read files from arguments | |
input_file = sys.argv[1] | |
output_file = sys.argv[2] | |
csv_in = open(input_file, 'r') | |
csv_out = open(output_file, 'w') | |
reader = csv.DictReader(csv_in) | |
writer = csv.DictWriter(csv_out, ["Date", "Reference", "Paid in and paid out", "Balance"]) | |
writer.writeheader() | |
for items in reader: | |
date = items['Date'] | |
reference = items[' Name'] # There's a space after the first header item, as this line is uniquely separated by comma-space. | |
gross = locale.atof(items[' Gross']) | |
fee = locale.atof(items[' Fee']) | |
balance = locale.atof(items[' Balance']) | |
if fee < 0: # fee is -ve | |
payment_balance = balance - fee | |
writer.writerow({ | |
"Date": date, | |
"Reference": "Fee", | |
"Paid in and paid out": fee, | |
"Balance": balance, | |
}) | |
writer.writerow({ | |
"Date": date, | |
"Reference": reference, | |
"Paid in and paid out": gross, | |
"Balance": payment_balance, | |
}) | |
else: | |
writer.writerow({ | |
"Date": date, | |
"Reference": reference, | |
"Paid in and paid out": gross, | |
"Balance": balance, | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment