#!/usr/bin/python # # Transfer Contacts from Nokia to BlackBerry # # I've used this to transfer my contacts from a Nokia 6101 to # a BlackBerry Bold 9000. # # To export i've used Nokia PC Suite version 7.1.30.8 and to # import BlackBerry Desktop Manager version 5.0.0.11 . # # The export process from Nokia PC Suite is easy. To import # csv data into blackberry's address book you need to use the # syncronization option and choose to sync using ascii import/export. # # Note: i'm using english versions of software. Maybe you need to # adjust the rules mapping for your specific language. # nokia fields # "Title";"First name";"Middle name";"Last name";"Suffix";"Job title";"Company";"Birthday";"SIP address";"Push-to-talk";"Share view";"User ID";"Notes";"General mobile";"General phone";"General email";"General fax";"General video call";"General web address";"General VOIP address";"General P.O.Box";"General extension";"General street";"General postal/ZIP code";"General city";"General state/province";"General country/region";"Home mobile";"Home phone";"Home email";"Home fax";"Home video call";"Home web address";"Home VOIP address";"Home P.O.Box";"Home extension";"Home street";"Home postal/ZIP code";"Home city";"Home state/province";"Home country/region";"Business mobile";"Business phone";"Business email";"Business fax";"Business video call";"Business web address";"Business VOIP address";"Business P.O.Box";"Business extension";"Business street";"Business postal/ZIP code";"Business city";"Business state/province";"Business country/region";"" # blackberry fields # "First Name";"Middle Name";"Last Name";"Title";"Company Name";"Work Phone";"Work Phone2";"Home Phone";"Home Phone2";"Other Phone";"Fax";"Mobile Phone";"PIN";"Pager";"Email Address 1";"Email Address 2";"Email Address 3";"Address1";"Address2";"Address3";"City";"State/Prov";"Zip/Postal Code";"Country";"Home Address1";"Home Address2";"Home Address3";"Home City";"Home State/Prov";"Home Zip/Postal Code";"Home Country";"Notes";"Interactive Handheld";"1-way Pager";"User Defined 1";"User Defined 2";"User Defined 3";"User Defined 4";"Salutation";"Web Address";"Direct Connect";"Categories";"Birthday";"Anniversary" # nokia to blackberry fields rules = { "First Name" : "First name", "Middle Name" : "Middle name", "Last Name" : "Last name", "Title" : "Title", "Company Name" : "Company", "Work Phone" : "Business phone", "Work Phone2" : "Business mobile", "Home Phone" : "Home phone", "Home Phone2" : "Home mobile", "Other Phone" : "General phone", "Fax" : "General fax", "Mobile Phone" : "General mobile", "PIN" : "", "Pager" : "", "Email Address 1" : "General email", "Email Address 2" : "Home email", "Email Address 3" : "Business email", "Address1" : "Business street", "Address2" : "Business P.O.Box", "Address3" : "Business extension", "City" : "Business city", "State/Prov" : "Business state/province", "Zip/Postal Code" : "Business postal/ZIP code", "Country" : "Business country/region", "Home Address1" : "Home street", "Home Address2" : "Home P.O.Box", "Home Address3" : "Home extension", "Home City" : "Home city", "Home State/Prov" : "Home state/province", "Home Zip/Postal Code" : "Home postal/ZIP code", "Home Country" : "Home country/region", "Notes" : "Notes", "Interactive Handheld" : "", "1-way Pager" : "", "User Defined 1" : "Home fax", "User Defined 2" : "Business fax", "User Defined 3" : "", "User Defined 4" : "", "Salutation" : "", "Web Address" : "General web address", "Direct Connect" : "", "Categories" : "", "Birthday" : "Birthday", "Anniversary" : "" } import string import codecs import os class nokia2blackberry: _csv_separator = '' _csv_delimiter = '' _input_file = '' _input_list = [] _output_file = '' _output_list = [] def __init__( self ): self.configure() self.read() self.transform() self.write() def configure( self ): self._csv_separator = raw_input( 'csv separator: ' ) self._csv_delimiter = raw_input( 'csv delimiter: ' ) self._input_file = raw_input( 'nokia csv export file: ' ) self._output_file = raw_input( 'blackberry csv import file: ' ) def _removehdrentries( self, s ): s = s.strip( self._csv_delimiter ) return s def _splitcsvline( self, s ): s = s.strip() s = s.split( self._csv_delimiter + self._csv_separator + self._csv_delimiter ) s = map( self._removehdrentries, s ) return s def _joincsvline( self, lst ): s = self._csv_delimiter + self._csv_separator + self._csv_delimiter s = s.join( lst ) s = self._csv_delimiter + s + self._csv_delimiter s = s + os.linesep return s def read( self ): f = codecs.open( self._input_file, 'r', 'utf-16' ) f_hdr = self._splitcsvline( f.readline() ) for line in f: line = self._splitcsvline( line ) if len( line ) == len( f_hdr ): h = {} for c in range( 0, len( f_hdr ), 1 ): if f_hdr[ c ]: # non-empty headers not accepted! h[ f_hdr[ c ] ] = line[ c ] self._input_list.append( h ) f.close() def transform( self ): for elem in self._input_list: h = rules.copy() for k,v in h.items(): if v in elem.keys(): h[ k ] = elem[ v ] self._output_list.append( h ) def write( self ): f = codecs.open( self._output_file, 'w', 'latin1' ) k_list = rules.keys() f.write( self._joincsvline( k_list ) ) for elem in self._output_list: p = [] for k in k_list: p.append( elem[ k ] ) f.write( self._joincsvline( p ) ) f.close() def main(): nokia2blackberry() if __name__ == '__main__': main()