summaryrefslogtreecommitdiffstats
path: root/contrib/csvbankingqif.py
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/csvbankingqif.py')
-rwxr-xr-xcontrib/csvbankingqif.py164
1 files changed, 82 insertions, 82 deletions
diff --git a/contrib/csvbankingqif.py b/contrib/csvbankingqif.py
index 4e0d7ea..c3700df 100755
--- a/contrib/csvbankingqif.py
+++ b/contrib/csvbankingqif.py
@@ -19,32 +19,32 @@
#* *
#***************************************************************************/
#
-# *** NOTE ***
+# *** NOTE ***
# It may be necessary to remove the second line, before running.
-# It may be necessary also, to change the currency symbol if your file
+# It may be necessary also, to change the currency symbol if your file
# includes one.
#
-# Simple utility to convert a csv format file, as from a bank, to qif
-# format for KMyMoney2. There is no standard for the layout of such a
-# file, but generally there will be a header line which indicates the
-# layout of the fields within the file. Even then though, the order of
-# the columns may vary. It is assumed, though, that the first column
-# will contain the date, in 'dd MM yy' format, 'MM' being the month
+# Simple utility to convert a csv format file, as from a bank, to qif
+# format for KMyMoney2. There is no standard for the layout of such a
+# file, but generally there will be a header line which indicates the
+# layout of the fields within the file. Even then though, the order of
+# the columns may vary. It is assumed, though, that the first column
+# will contain the date, in 'dd MM yy' format, 'MM' being the month
# name or number.
-# The second column is the detail. The third and fourth columns are
-# assumed to be debits and credits. Even fron the same bank, these
-# columns may be reversed, but the script handles this. Alternatively,
-# the third column may be the amount. There may also be additional
+# The second column is the detail. The third and fourth columns are
+# assumed to be debits and credits. Even fron the same bank, these
+# columns may be reversed, but the script handles this. Alternatively,
+# the third column may be the amount. There may also be additional
# columns, such as current balance, but these are all ignored.
-# Apart from the header line, there are likely to be other lines, with
+# Apart from the header line, there are likely to be other lines, with
# account number, balance details, etc. These are skipped.
#
# First, make the script executable: chmod u+x csvbankinyqif.py .
-# The script should be added to the KMM QIF import profile. In KMM, open
-# Tools/QIF Profile Editor and click on 'New' at the bottom. then enter a
-# name, such as csvbank, then click 'OK'. Next, click on that name in the
-# next window, and open the Filter tab. For the 'Input filter location',
-# select the location you chose for the script file. For the Input filter
+# The script should be added to the KMM QIF import profile. In KMM, open
+# Tools/QIF Profile Editor and click on 'New' at the bottom. then enter a
+# name, such as csvbank, then click 'OK'. Next, click on that name in the
+# next window, and open the Filter tab. For the 'Input filter location',
+# select the location you chose for the script file. For the Input filter
# file type, enter *.csv, or whatever extension your data file has.
# Finally, click 'OK'.
# When ready, select File/Import/QIF, and browse to your data file, then
@@ -55,97 +55,97 @@
mnths=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
currency = '£'
setup = True
-debsfirst = False # credit column is before debit
-both = False # only one amount column
+debsfirst = False # credit column is before debit
+both = False # only one amount column
print("!Type:Bank")
while 1:
try:
- line=raw_input()
+ line=input()
except:break
- if line == "" : continue # empty line
- line = line.replace('"','',) # Strip out ' "' quotes
- line = line.replace(currency,'',) # Strip out '£', etc. symbol
+ if line == "" : continue # empty line
+ line = line.replace('"','',) # Strip out ' "' quotes
+ line = line.replace(currency,'',) # Strip out '£', etc. symbol
cols = line.split(',') # Seperator between columns
if setup:
#
-# *** SETUP ***
+# *** SETUP ***
#
- dt = cols[0][0:2] # Might be a date (day)
- datefound = ((dt > '0') and (dt < '32')) #this looks like a date
+ dt = cols[0][0:2] # Might be a date (day)
+ datefound = ((dt > '0') and (dt < '32')) #this looks like a date
hdrfound = (cols[0] == 'Date')
if not datefound and not hdrfound: continue# still in hdrs
if hdrfound:
#
-# *** 'Date', so now in header ***
+# *** 'Date', so now in header ***
#
hdrfound = False
- #line = line.replace(' ','',) # Strip out spaces in hdr
- cols[2] = cols[2].replace(' ','',) # Strip out spaces in hdr
+ #line = line.replace(' ','',) # Strip out spaces in hdr
+ cols[2] = cols[2].replace(' ','',) # Strip out spaces in hdr
if cols[2] == 'Debits':
- debsfirst = True
- continue
+ debsfirst = True
+ continue
elif cols[2] == 'Credits':
- debsfirst = False
- continue
+ debsfirst = False
+ continue
elif cols[2] == 'Amount':
- both = True
- continue
+ both = True
+ continue
else:
- print 'Error in col[2]'
- print '*** Error in header - col 2 s/b Debit, Credit, or Amount'
- #continue
- exit
+ print('Error in col[2]')
+ print('*** Error in header - col 2 s/b Debit, Credit, or Amount')
+ #continue
+ exit
setup ==False
#
-# *** Transactions ***
+# *** Transactions ***
#
cnum = 0 # First column
for col in cols:
if cnum > 3: break
#
-# # Process Date
+# # Process Date
#
elif cnum == 0:
- col =col.replace(' ','/',2) # Change date seperator to '/'
- m = col.split('/')
-# *** Check if month not numeric
- mn = m[1][0:3] # Extract month string from field 2
- fld = 2
- try:
- mnth = mnths.index(mn) # Get month number
- except ValueError: # Field 2 not a valid month name
- mn = m[0][0:3] # .. so try field 1
- fld = 1
- try:
- mnth = mnths.index(mn)
- except ValueError: # Nor is field 1
- dat = ''.join(col) # ..so use as is (numeric)
- else: # Field 1 is month name
- dat = col[1:3] + str(mnth + 1) + '/' +m[2]
- else: # Field 2 is month name
- dat = col[0:3] + str(mnth + 1) + '/' +m[2]
- line = 'D' + dat+'\n'
-#
-# # Detail column
-#
- elif cnum == 1:
- #col = col.replace('"','')
- line = line + 'P' + col +'\n'
-#
-# # Debit or credit column
-#
- elif cnum == 2:
- if col != "":
- if debsfirst == True: # This is Debit column
- col = '-' + col # Mark as -ve
- line = line + 'T' + col +'\n'
-#
-# # Credit or debit?
+ col =col.replace(' ','/',2) # Change date seperator to '/'
+ m = col.split('/')
+# *** Check if month not numeric
+ mn = m[1][0:3] # Extract month string from field 2
+ fld = 2
+ try:
+ mnth = mnths.index(mn) # Get month number
+ except ValueError: # Field 2 not a valid month name
+ mn = m[0][0:3] # .. so try field 1
+ fld = 1
+ try:
+ mnth = mnths.index(mn)
+ except ValueError: # Nor is field 1
+ dat = ''.join(col) # ..so use as is (numeric)
+ else: # Field 1 is month name
+ dat = col[1:3] + str(mnth + 1) + '/' +m[2]
+ else: # Field 2 is month name
+ dat = col[0:3] + str(mnth + 1) + '/' +m[2]
+ line = 'D' + dat+'\n'
+#
+# # Detail column
+#
+ elif cnum == 1:
+ #col = col.replace('"','')
+ line = line + 'P' + col +'\n'
+#
+# # Debit or credit column
+#
+ elif cnum == 2:
+ if col != "":
+ if debsfirst == True: # This is Debit column
+ col = '-' + col # Mark as -ve
+ line = line + 'T' + col +'\n'
+#
+# # Credit or debit?
#
elif ((cnum == 3) and (both == False)):
- if col != "":
- if ((debsfirst == False) ):
- col = '-' + col # Mark as -ve
- line = line + 'T' + col + '\n'
+ if col != "":
+ if ((debsfirst == False) ):
+ col = '-' + col # Mark as -ve
+ line = line + 'T' + col + '\n'
cnum+=1
- print line + '^' # output this entry
+ print(line + '^') # output this entry