1. import datetime
  2. def map_date_fields(data, field_mapping):
  3. """
  4. Maps date fields in a data structure based on a provided mapping.
  5. Args:
  6. data (dict or list of dict): The data structure containing date fields.
  7. field_mapping (dict): A dictionary mapping legacy field names to new field names.
  8. e.g., {'old_date_field': 'new_date_field'}
  9. Returns:
  10. dict or list of dict: The modified data structure with mapped date fields.
  11. """
  12. if isinstance(data, dict):
  13. new_data = {}
  14. for old_field, value in data.items():
  15. if old_field in field_mapping:
  16. new_field = field_mapping[old_field]
  17. if isinstance(value, str):
  18. try:
  19. # Attempt to parse the date string
  20. date_obj = datetime.datetime.strptime(value, '%Y-%m-%d') # Adjust format as needed
  21. new_data[new_field] = date_obj
  22. except ValueError:
  23. new_data[new_field] = None # Handle parsing errors
  24. else:
  25. new_data[new_field] = value #if already datetime object
  26. else:
  27. new_data[old_field] = value
  28. return new_data
  29. elif isinstance(data, list):
  30. new_data = []
  31. for item in data:
  32. new_item = map_date_fields(item, field_mapping)
  33. new_data.append(new_item)
  34. return new_data
  35. else:
  36. return data # Handle other data types if needed
  37. if __name__ == '__main__':
  38. # Example Usage
  39. legacy_data = {
  40. 'birthdate': '1990-01-15',
  41. 'report_date': '2023-10-26',
  42. 'expiration_date': '2024-12-31',
  43. 'other_field': 'some_value'
  44. }
  45. mapping = {
  46. 'birthdate': 'date_of_birth',
  47. 'report_date': 'report_date',
  48. 'expiration_date': 'expiry_date'
  49. }
  50. mapped_data = map_date_fields(legacy_data, mapping)
  51. print(mapped_data)
  52. legacy_data_list = [
  53. {'birthdate': '1985-05-20', 'report_date': '2022-03-10'},
  54. {'birthdate': '1998-11-01', 'report_date': '2023-07-18'}
  55. ]
  56. mapped_data_list = map_date_fields(legacy_data_list, mapping)
  57. print(mapped_data_list)

Add your comment