import datetime
def map_date_fields(data, field_mapping):
"""
Maps date fields in a data structure based on a provided mapping.
Args:
data (dict or list of dict): The data structure containing date fields.
field_mapping (dict): A dictionary mapping legacy field names to new field names.
e.g., {'old_date_field': 'new_date_field'}
Returns:
dict or list of dict: The modified data structure with mapped date fields.
"""
if isinstance(data, dict):
new_data = {}
for old_field, value in data.items():
if old_field in field_mapping:
new_field = field_mapping[old_field]
if isinstance(value, str):
try:
# Attempt to parse the date string
date_obj = datetime.datetime.strptime(value, '%Y-%m-%d') # Adjust format as needed
new_data[new_field] = date_obj
except ValueError:
new_data[new_field] = None # Handle parsing errors
else:
new_data[new_field] = value #if already datetime object
else:
new_data[old_field] = value
return new_data
elif isinstance(data, list):
new_data = []
for item in data:
new_item = map_date_fields(item, field_mapping)
new_data.append(new_item)
return new_data
else:
return data # Handle other data types if needed
if __name__ == '__main__':
# Example Usage
legacy_data = {
'birthdate': '1990-01-15',
'report_date': '2023-10-26',
'expiration_date': '2024-12-31',
'other_field': 'some_value'
}
mapping = {
'birthdate': 'date_of_birth',
'report_date': 'report_date',
'expiration_date': 'expiry_date'
}
mapped_data = map_date_fields(legacy_data, mapping)
print(mapped_data)
legacy_data_list = [
{'birthdate': '1985-05-20', 'report_date': '2022-03-10'},
{'birthdate': '1998-11-01', 'report_date': '2023-07-18'}
]
mapped_data_list = map_date_fields(legacy_data_list, mapping)
print(mapped_data_list)
Add your comment