Skip to content

Instantly share code, notes, and snippets.

@ciiqr
Created June 7, 2019 01:37
Show Gist options
  • Save ciiqr/dad960ec49e7415cbd273acbcd4927e3 to your computer and use it in GitHub Desktop.
Save ciiqr/dad960ec49e7415cbd273acbcd4927e3 to your computer and use it in GitHub Desktop.
convert keepassx2 csv to 1password format (with group name as custom field)
import csv
import json
from os import path
KEEPASS_COLUMNS = [
"Group","Title","Username","Password","URL","Notes"
]
ONE_PASSWORD_COLUMNS = [
'title','website','username','password','notes','custom field 1'
]
# read keepass csv (exported with keepassx2)
with open(path.expanduser('~/passwords.csv'), newline='') as keepassCsv:
keepass = csv.reader(keepassCsv, delimiter=',', quotechar='"')
# open 1password csv
with open(path.expanduser('~/1password.csv'), 'w', newline='') as onePasswordCsv:
onePassword = csv.writer(onePasswordCsv, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
# for each keepass record
for recordList in keepass:
# record
record = dict(zip(KEEPASS_COLUMNS, recordList))
group = record['Group'].split('/')[1]
# convert to 1password values list
onePasswordRecord = [record['Title'], record['URL'], record['Username'], record['Password'], record['Notes'], 'group:' + group]
# write to 1password csv
onePassword.writerow(onePasswordRecord)
# debug
# print(json.dumps(record))
# print(json.dumps(onePasswordRecord))
@ciiqr
Copy link
Author

ciiqr commented Jun 7, 2019

limitations:

  • no history (not exported by keepassx2, not supported by 1password)
  • no advanced fields (not exported by keepassx2)
  • deleted entries are exported (could be easily added)

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