diff --git a/bt5/erp5_barcode/ExtensionTemplateItem/portal_components/extension.erp5.Barcode.py b/bt5/erp5_barcode/ExtensionTemplateItem/portal_components/extension.erp5.Barcode.py
index cf9f783961ff51193c565bd6ea9371770260668e..9fcfd2becc44982e6cefa5d058fe9f2447a9f5aa 100644
--- a/bt5/erp5_barcode/ExtensionTemplateItem/portal_components/extension.erp5.Barcode.py
+++ b/bt5/erp5_barcode/ExtensionTemplateItem/portal_components/extension.erp5.Barcode.py
@@ -26,7 +26,6 @@
 ##############################################################################
 
 import os
-from string import zfill
 from urllib import urlencode
 import tempfile
 from DateTime import DateTime
@@ -82,14 +81,14 @@ def printBarcodeSheet(self, sheet_number=1, input_list=[], test=False):
   tempfile.tempdir = tempdir
   if test:
     #Fake list
-    input_list = os.linesep.join(['TEST%s' % zfill(b, 8) for b in range(1111111,  1111111 + ( row_number * column_number * sheet_number ))])
+    input_list = os.linesep.join(['TEST%s' % str(b).zfill(8) for b in range(1111111,  1111111 + ( row_number * column_number * sheet_number ))])
   elif input_list not in ('', None):
    if not isinstance(input_list, list):
      input_list = os.linesep.join(map(escapeString, input_list.split(os.linesep)))
    else:
      input_list = os.linesep.join(input_list)
   else:
-    input_list = os.linesep.join(['%s' % zfill(self.portal_ids.generateNewId(id_group='barcode'), 12) for b in range( row_number * column_number * sheet_number )])
+    input_list = os.linesep.join(['%s' % str(self.portal_ids.generateNewId(id_group='barcode')).zfill(12) for b in range( row_number * column_number * sheet_number )])
   text_command = 'echo "%s" > %s' % (input_list, new_txt_file_path)
   ret = os.system(text_command)
   if ret != 0:
diff --git a/bt5/erp5_barcode/SkinTemplateItem/portal_skins/erp5_barcode/BarcodeModule_getLastGeneratedId.py b/bt5/erp5_barcode/SkinTemplateItem/portal_skins/erp5_barcode/BarcodeModule_getLastGeneratedId.py
index a872bdd53e063fe651e7828ca04b49eab0b761c2..f2f82bcc8f4dc9927bacbcd5b24347c0fc6dcd88 100644
--- a/bt5/erp5_barcode/SkinTemplateItem/portal_skins/erp5_barcode/BarcodeModule_getLastGeneratedId.py
+++ b/bt5/erp5_barcode/SkinTemplateItem/portal_skins/erp5_barcode/BarcodeModule_getLastGeneratedId.py
@@ -1,2 +1 @@
-from string import zfill
-return zfill(context.portal_ids.getLastGeneratedId(id_group='barcode'),12)
+return str(context.portal_ids.getLastGeneratedId(id_group='barcode')).zfill(12)
diff --git a/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_hashVariationCategoryList.py b/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_hashVariationCategoryList.py
index 37bc53404759d020b0428a8249b8a4ba55f2602b..2920d73698d011031e2fe19be5213380c5087694 100644
--- a/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_hashVariationCategoryList.py
+++ b/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/BudgetLine_hashVariationCategoryList.py
@@ -35,8 +35,8 @@ for item in item_list:
   item_value = item[int(not is_right_display)]
 
   # Hash key from item_value
-  item_split = string.split(item_value, '/')
-  item_key = string.join(item_split[:split_depth] , '/' )
+  item_split = item_value.split('/')
+  item_key = '/'.join(item_split[:split_depth])
   base_category = item_split[0]
   multi = True
 
diff --git a/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/Budget_hashVariationCategoryList.py b/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/Budget_hashVariationCategoryList.py
index ff91bb7994a197f32f19bb9254cc86c6f80a380b..a8cae1c8d71e8666b1dc806fb5713d135025fd0f 100644
--- a/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/Budget_hashVariationCategoryList.py
+++ b/bt5/erp5_budget/SkinTemplateItem/portal_skins/erp5_budget/Budget_hashVariationCategoryList.py
@@ -30,8 +30,8 @@ for item in item_list:
   item_value = item[int(not is_right_display)]
 
   # Hash key from item_value
-  item_split = string.split(item_value, '/')
-  item_key = string.join(item_split[:split_depth] , '/' )
+  item_split = item_value.split('/')
+  item_key = '/'.join(item_split[:split_depth])
   base_category = item_split[0]
   multi = False # XXX or now budget level are only single value.
 
diff --git a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateObjectStructure.py b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateObjectStructure.py
index 3bb611b1ea5a78c8133548f4d3c4b674e3fcc232..639de2d5da0adcdeec0fc6c12b2106c1adb4e3e7 100644
--- a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateObjectStructure.py
+++ b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateObjectStructure.py
@@ -1,5 +1,3 @@
-from string import zfill
-
 ##################################################
 #### About the transformation_rules structure ####
 # a key indicate that input of that level having the same value must be grouped together
diff --git a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateTwoLevelObjectStructure.py b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateTwoLevelObjectStructure.py
index 61e292e4136600e06501b85eee0ad8ca58925b12..7a0c47804e2e39ea5ab1837494e207d114fbee67 100644
--- a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateTwoLevelObjectStructure.py
+++ b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_generateTwoLevelObjectStructure.py
@@ -1,5 +1,3 @@
-from string import zfill
-
 ##################################################
 #### About the transformation_rules structure ####
 # a key indicate that input of that level having the same value must be grouped together
@@ -92,7 +90,7 @@ for upper_level_key in structured_input_data:
   for second_level in structured_input_data[upper_level_key][1]:
     second_level_id += 10
     new_2nd_level_obj = new_1st_level_obj.newContent( portal_type = level_portal_types[1]
-                                                    , id          = zfill(second_level_id, 4)
+                                                    , id          = str(second_level_id).zfill(4)
                                                     )
     for property_title in second_level.keys():
       new_2nd_level_obj.setProperty(property_title, second_level[property_title])
diff --git a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_initialize.py b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_initialize.py
index 97207ff876cf052c1c5ef160d6929709f4ce4023..d45f1ef5310cbaa7bd98168a280d4446953d2123 100644
--- a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_initialize.py
+++ b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/FastInput_initialize.py
@@ -1,5 +1,4 @@
 from Products.ERP5Type.Document import newTempBase
-from string import zfill
 
 global portal_object, new_id, l
 
@@ -14,7 +13,7 @@ def createInputLine():
   int_len = 3
   o = newTempBase( portal_object
                  , str(new_id)
-                 , uid ='new_%s' % zfill(new_id, int_len)
+                 , uid ='new_%s' % str(new_id).zfill(int_len)
                  )
   l.append(o)
 
diff --git a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/UseCase_generateUseCaseScenarioList.py b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/UseCase_generateUseCaseScenarioList.py
index 06bb4635b8591437a776500bff3f39793bc51abf..f6e7a601915d1a2d81c1b2ddc7853aa6992e6e8b 100644
--- a/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/UseCase_generateUseCaseScenarioList.py
+++ b/bt5/erp5_consulting/SkinTemplateItem/portal_skins/erp5_consulting/UseCase_generateUseCaseScenarioList.py
@@ -1,5 +1,3 @@
-from string import zfill
-
 destination_obj = context.getObject()
 
 first_level_type  = 'Use Case Scenario'
diff --git a/bt5/erp5_immobilisation/DocumentTemplateItem/portal_components/document.erp5.AmortisationRule.py b/bt5/erp5_immobilisation/DocumentTemplateItem/portal_components/document.erp5.AmortisationRule.py
index 98abd64a68bfb4026664f5cbfd2f0d66a18fe42c..a1d7d88a53dab8fe360628a04c2df6b6d50cd790 100644
--- a/bt5/erp5_immobilisation/DocumentTemplateItem/portal_components/document.erp5.AmortisationRule.py
+++ b/bt5/erp5_immobilisation/DocumentTemplateItem/portal_components/document.erp5.AmortisationRule.py
@@ -28,7 +28,6 @@
 
 from AccessControl import ClassSecurityInfo
 from DateTime import DateTime
-from string import capitalize
 
 from erp5.component.module.DateUtils import centis, getClosestDate, addToDate
 from erp5.component.module.DateUtils import getDecimalNumberOfYearsBetween
@@ -99,7 +98,7 @@ class AmortisationRule(RuleMixin):
         modified_properties = []
         for (key, value) in calculated_movement.items():
           if key not in ('name','status','id','divergent'):
-            getter_name = 'get%s' % ''.join([capitalize(o) for o in key.split('_')])
+            getter_name = 'get%s' % ''.join([o.capitalize() for o in key.split('_')])
             getter = getattr(simulation_movement, getter_name)
             previous_value = getter()
             # Check if this property changes
@@ -109,7 +108,7 @@ class AmortisationRule(RuleMixin):
 
             if value is None and key.split('_')[-1] == 'value':
               key = '_'.join(key.split('_')[:-1])
-            setter_name = 'set%s' % ''.join([capitalize(o) for o in key.split('_')])
+            setter_name = 'set%s' % ''.join([o.capitalize() for o in key.split('_')])
             setter = getattr(simulation_movement, setter_name)
             setter(value)
         simulation_movement.edit(start_date=simulation_movement.getStopDate())
diff --git a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationSystem_addAmortisationMethod.py b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationSystem_addAmortisationMethod.py
index 57ddb1a5e771a6f4f18756d36152d358488f7aa3..e1084af77f76670ba34e1aaee3400231383699a9 100644
--- a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationSystem_addAmortisationMethod.py
+++ b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/AmortisationSystem_addAmortisationMethod.py
@@ -5,9 +5,6 @@
 # This script adds the needed actions in the Immobilisation portal_type, and
 # each amortisable portal_type
 
-from string import capitalize
-
-
 def addAction(portal_type, portal_type_type, country, amortisation_method):
   print('Adding UI tab "Amortisation Details" for method %s on portal_type %s... ' % (amortisation_method,portal_type), end=' ')
   id = "%s_%s_amortisation_details_view" % (country, amortisation_method)
@@ -22,8 +19,8 @@ def addAction(portal_type, portal_type_type, country, amortisation_method):
                           name = "Amortisation Details",
                           action = action,
                           condition = "object/IsUsing%s%sAmortisationMethod" % (
-                                           capitalize(country),
-                                           "".join([capitalize(x) for x in amortisation_method.split('_')]) ),
+                                           country.capitalize(),
+                                           "".join([x.capitalize() for x in amortisation_method.split('_')]) ),
                           permission = ('View',),
                           category = "object_view",
                           visible = 1)
diff --git a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/PortalType_ImmobilisationMovement_addAmortisationMethodActions.py b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/PortalType_ImmobilisationMovement_addAmortisationMethodActions.py
index cf9eab4e316aee5ee3d7c9968badd7dfbb5e69cf..ddef4eca114a636e391d0eb51e7612c92c5ebdd1 100644
--- a/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/PortalType_ImmobilisationMovement_addAmortisationMethodActions.py
+++ b/bt5/erp5_immobilisation/SkinTemplateItem/portal_skins/erp5_immobilisation/PortalType_ImmobilisationMovement_addAmortisationMethodActions.py
@@ -1,5 +1,3 @@
-from string import capitalize
-
 view_id_basis = "%s_%s_amortisation_method_view_details"
 view_action_basis = "Immobilisation_%s%sAmortisationMethodViewDetails"
 view_condition_basis = "object/Immobilisation_isUsing%s%sAmortisationMethod"
@@ -27,9 +25,9 @@ for method in amortisation_method_list:
       exists = 1
 
   if not exists:
-    capitalized_id = "".join([capitalize(o) for o in id.split("_")])
+    capitalized_id = "".join([o.capitalize() for o in id.split("_")])
     action_action = view_action_basis % (region, capitalized_id)
-    action_condition = view_condition_basis % (capitalize(region),capitalized_id)
+    action_condition = view_condition_basis % (region.capitalize(), capitalized_id)
     context.addAction(id = action_id,
                       name = "Amortisation Details",
                       action = action_action,
diff --git a/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportFailedResultList.py b/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportFailedResultList.py
index d1732f4a7a7b2a50552ce02bfe4cb3859a96bbcb..bf3ba453f6af5cad6666ba8417bd272b803a14b4 100644
--- a/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportFailedResultList.py
+++ b/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportFailedResultList.py
@@ -1,5 +1,4 @@
 from Products.ERP5Type.Document import newTempBase
-from string import zfill
 
 portal_object = context.getPortalObject()
 num = 0
@@ -20,8 +19,8 @@ for [method_id, result] in result_list:
   int_len = 7
   if not result['success']:
       o = newTempBase(portal_object, safe_id)
-      o.setUid(  'new_%s' % zfill(num, int_len)) # XXX There is a security issue here
-      o.edit(uid='new_%s' % zfill(num, int_len)) # XXX There is a security issue here
+      o.setUid(  'new_%s' % str(num).zfill(int_len)) # XXX There is a security issue here
+      o.edit(uid='new_%s' % str(num).zfill(int_len)) # XXX There is a security issue here
       o.edit(**result['object'])
       result_listbox.append(o)
 
diff --git a/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportResultList.py b/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportResultList.py
index 0c83cb605ca498e1ac9f0d651151360498993629..8df4b2492c6ff8db7aceb0a6309434a83c3ed132 100644
--- a/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportResultList.py
+++ b/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getReportResultList.py
@@ -1,5 +1,4 @@
 from Products.ERP5Type.Document import newTempBase
-from string import zfill
 
 portal_object = context.getPortalObject()
 num = 0
@@ -25,8 +24,8 @@ for [method_id, result] in result_list:
   num += 1
   int_len = 3
   o = newTempBase(portal_object, safe_id)
-  o.setUid( 'new_%s' % zfill(num, int_len)) # XXX There is a security issue here
-  o.edit(uid='new_%s' % zfill(num, int_len)) # XXX There is a security issue here
+  o.setUid( 'new_%s' % str(num).zfill(int_len)) # XXX There is a security issue here
+  o.edit(uid='new_%s' % str(num).zfill(int_len)) # XXX There is a security issue here
   o.edit( method_id   = method_id
          , result     = result['message']
          , object_url = result['object_url']
diff --git a/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getSpreadsheetColumnNameList.py b/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getSpreadsheetColumnNameList.py
index 6c4e5a2218a1b4454a441601436f721e248b9464..85c1aba73cd455f415290f2851cc92ac2aecebca 100644
--- a/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getSpreadsheetColumnNameList.py
+++ b/bt5/erp5_ooo_import/SkinTemplateItem/portal_skins/erp5_ooo_import/Base_getSpreadsheetColumnNameList.py
@@ -1,5 +1,4 @@
 from Products.ERP5Type.Document import newTempBase
-from string import zfill
 
 num = 0
 listbox_lines = []
@@ -23,8 +22,8 @@ for spreadsheet in spreadsheets.keys():
       # int_len is used to fill the uid of the created object like 0000001
       int_len = 7
       o = newTempBase(context, safe_id)
-      o.setUid('new_%s' % zfill(num, int_len)) # XXX There is a security issue here
-      o.edit(uid='new_%s' % zfill(num, int_len)) # XXX There is a security issue here
+      o.setUid('new_%s' % str(num).zfill(int_len)) # XXX There is a security issue here
+      o.edit(uid='new_%s' % str(num).zfill(int_len)) # XXX There is a security issue here
       o.edit(
           id=safe_id,
           spreadsheet_name=spreadsheet,
diff --git a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Amount_hashVariationCategoryItemList.py b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Amount_hashVariationCategoryItemList.py
index d3ecc5381af643fa35da031e79614d8339077bf4..7db380514cd746cffe6f058b3171122914241432 100644
--- a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Amount_hashVariationCategoryItemList.py
+++ b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Amount_hashVariationCategoryItemList.py
@@ -11,8 +11,8 @@ for item in item_list:
   item_value = item[int(not is_right_display)]
 
   # Hash key from item_value
-  item_split = string.split(item_value, '/')
-  item_key = string.join(item_split[:split_depth] , '/' )
+  item_split = item_value.split('/')
+  item_key = '/'.join(item_split[:split_depth])
   base_category = item_split[0]
   if item_key not in sub_field_dict:
     # Create property dict
diff --git a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/TransformedResource_hashVariationCategoryItemList.py b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/TransformedResource_hashVariationCategoryItemList.py
index d150697519569afb1cd11c9827c19154bd998215..e90b49c159e199886c4dbddefe924366e0d4d60d 100644
--- a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/TransformedResource_hashVariationCategoryItemList.py
+++ b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/TransformedResource_hashVariationCategoryItemList.py
@@ -11,8 +11,8 @@ for item in item_list:
   item_value = item[int(not is_right_display)]
 
   # Hash key from item_value
-  item_split = string.split(item_value, '/')
-  item_key = string.join(item_split[:split_depth] , '/' )
+  item_split = item_value.split('/')
+  item_key = '/'.join(item_split[:split_depth])
 
   if item_key not in sub_field_dict:
     # Create property dict
diff --git a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Project_initializeFastInput.py b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Project_initializeFastInput.py
index c3db5db0bb6758004eda0c192f3700da774f08fc..401d668093b69e7ae2aeedd95503546b5452ed0a 100644
--- a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Project_initializeFastInput.py
+++ b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/Project_initializeFastInput.py
@@ -1,5 +1,4 @@
 from Products.ERP5Type.Document import newTempBase
-from string import zfill
 
 portal_object = context.getPortalObject()
 
@@ -15,7 +14,7 @@ def createInputLine(new_id):
   int_len = 3
   o = newTempBase( portal_object,
                    str(new_id),
-                   uid ='new_%s' % zfill(new_id, int_len)
+                   uid ='new_%s' % str(new_id).zfill(int_len)
                  )
   l.append(o)
 
diff --git a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project_trade/Delivery_updateTaskFastInputDialog.py b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project_trade/Delivery_updateTaskFastInputDialog.py
index 6da70a72d101f0f3a0e14b3e22774a343d9be642..0a50176a7abdfa83e9f3a709e5bce38ed908a34d 100644
--- a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project_trade/Delivery_updateTaskFastInputDialog.py
+++ b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project_trade/Delivery_updateTaskFastInputDialog.py
@@ -5,7 +5,6 @@ information is correct.
 portal = context.getPortalObject()
 line_portal_type = "Sale Order Line"
 request = context.REQUEST
-from string import zfill
 from Products.PythonScripts.standard import Object
 from Products.ERP5Type.Message import translateString
 
@@ -31,7 +30,7 @@ i = 1
 project_search_dict = {}
 for line in line_list:
   line_dict = {}
-  key = zfill(i,3)
+  key = str(i).zfill(3)
   for property_name in ('title', 'quantity_unit_title', 'quantity',
                         'resource_title', 'total_price', 'price',
                         'reference', 'relative_url'):
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryLine_hashVariationCategoryItemList.py b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryLine_hashVariationCategoryItemList.py
index 89fdcbf18446e5b298ada631ea1a062c87524430..8cfa93dae3ae086c2e07fa9d1faf84c1b5a8cce0 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryLine_hashVariationCategoryItemList.py
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryLine_hashVariationCategoryItemList.py
@@ -17,8 +17,8 @@ for item in item_list:
   # Get value of the item
   item_value = item[int(not is_right_display)]
   # Hash key from item_value
-  item_split = string.split(item_value, '/')
-  item_key = string.join(item_split[:split_depth] , '/' )
+  item_split = item_value.split('/')
+  item_key = '/'.join(item_split[:split_depth])
   base_category = item_split[0]
 
   sub_field_property_dict = sub_field_dict.setdefault(item_key, default_sub_field_property_dict.copy())
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Delivery_getDivergenceMessageList.py b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Delivery_getDivergenceMessageList.py
index 27267d24492b542255101376cf1d765939214b6f..cf325026136dfc93ec13ae023ba737b947989b9b 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Delivery_getDivergenceMessageList.py
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/Delivery_getDivergenceMessageList.py
@@ -1,8 +1,6 @@
 divergence_messages_list =  context.getDivergenceList()
 
 from Products.ERP5Type.Document import newTempBase
-from string import zfill
-
 
 portal_object = context.getPortalObject()
 l = []
@@ -13,7 +11,7 @@ def createInputLine(d_message, new_id):
 
   o = newTempBase( portal_object
                  , str(new_id)
-                 , uid ='new_%s' % zfill(new_id, int_len)
+                 , uid ='new_%s' % str(new_id).zfill(int_len)
                  ,  message = str(d_message.getTranslatedMessage())
                  ,  tested_property_id = d_message.getProperty('tested_property')
                  ,  object_title =  d_message.getObject().getTranslatedTitle()
diff --git a/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisableItem.py b/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisableItem.py
index 8c402be7af6c8b1721a102abeb077cebebd43441..9bf00335f5503d75cf6ece236065641d93151646 100644
--- a/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisableItem.py
+++ b/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisableItem.py
@@ -32,7 +32,6 @@ import zope.interface
 from AccessControl import ClassSecurityInfo
 
 from DateTime import DateTime
-from string import capitalize
 
 from Products.ERP5Type import Permissions, PropertySheet
 from erp5.component.interface.IImmobilisationItem import IImmobilisationItem
@@ -469,7 +468,7 @@ class ImmobilisableItem(Item, Amount):
             property_list.extend(movement.getUncontinuousNeededSpecificParameterListForItem(self))
             property_list.extend(movement.getFacultativeSpecificParameterListForItem(self))
             for key,value,_ in property_list:
-              value = 'get' + ''.join(map(capitalize, value.split('_')))
+              value = 'get' + ''.join(e.capitalize() for e in value.split('_'))
               value = getattr(movement, value, None)
               if value is not None:
                 value = value()
diff --git a/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisationMovement.py b/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisationMovement.py
index f2f85fb206e7ce32e2c0c8b78063c99d56d7ea98..327818c9ffc2ce919856d8c35a66cf0d7299141b 100644
--- a/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisationMovement.py
+++ b/product/ERP5/bootstrap/erp5_core/DocumentTemplateItem/portal_components/document.erp5.ImmobilisationMovement.py
@@ -33,8 +33,6 @@ from Products.ERP5Type import Permissions, PropertySheet
 from Products.ERP5Type.XMLObject import XMLObject
 from erp5.component.document.Movement import Movement
 
-from string import capitalize
-
 UNIMMOBILISING_METHOD = "unimmobilise"
 NO_CHANGE_METHOD = "no_change"
 AMORTISATION_METHOD_PREFIX = "portal_skins/erp5_accounting_"
@@ -103,7 +101,7 @@ class ImmobilisationMovement(Movement, XMLObject):
     def checkValuesAreNotNone(property_list):
       errors = []
       for key, value, name in property_list:
-        value = 'get' + ''.join(map(capitalize, value.split('_')))
+        value = 'get' + ''.join(e.capitalize() for e in value.split('_'))
         value = getattr(self, value, None)
         if value is not None:
           value = value()
diff --git a/product/ZMySQLDA/db.py b/product/ZMySQLDA/db.py
index 4774e503018a1665b7e5c72a740cb3770e1cfad1..78d8bab6dfd51b33a62e5600839bf35806d2f003 100644
--- a/product/ZMySQLDA/db.py
+++ b/product/ZMySQLDA/db.py
@@ -356,7 +356,6 @@ class DB(TM):
             c = self._query('SHOW COLUMNS FROM %s' % table_name)
         except Exception:
             return ()
-        from string import join
         r=[]
         for Field, Type, Null, Key, Default, Extra in c.fetch_row(0):
             info = {}
@@ -380,7 +379,7 @@ class DB(TM):
             info['Name'] = Field
             info['Type'] = type_xlate.get(short_type,'string')
             info['Extra'] = Extra,
-            info['Description'] = join([Type, field_default, Extra or '',
+            info['Description'] = ' '.join([Type, field_default, Extra or '',
                                         key_types.get(Key, Key or ''),
                                         Null != 'YES' and 'NOT NULL' or '']),
             info['Nullable'] = Null == 'YES'