-4

I have a list of dates in a csv file which I would like to extract the last date of each month using python.

For example, 03/08/2019 20/08/2019 30/12/2020 31/12/2020

The output should be 20/08/2019 & 31/12/2020

2 Answers2

0

You can sort the list of dates based on year, month and date and then convert it to a dict with key as the month and year, which would retain only the last date for a given month and year and then get dict's values as a list

>>> lst = ['03/08/2019', '20/08/2019', '30/12/2020', '31/12/2020']
>>> list({date.split('/', 1)[-1]:date for date in sorted(lst, key=lambda date: date.split('/')[::-1])}.values())
['20/08/2019', '31/12/2020']

Or using datetime

>>> from datetime import datetime
>>> to_date = lambda d: datetime.strptime(d, '%d/%m/%Y')
>>> list({to_date(d).replace(day=1):d for d in sorted(lst, key=to_date)}.values())
['20/08/2019', '31/12/2020']
Sunitha
  • 11,777
  • 2
  • 20
  • 23
0

@PythonNovice. I'd suggest starting with itertools.groupBy which is discussed here. You've got to open that file, parse the lines, sort the data, group it by months and take the last element of each month. Is there a specific part of that with which you're having a problem?

Ion Freeman
  • 512
  • 4
  • 19