Sort CSV by date in Python

I am trying to sort a CSV file, and I want it to be sorted by date in reverse order: new first.

def SortCsvByField( filename, fieldNo, sep = ',' ):
   records = [line.split(sep) for line in file(filename)]

How easy it is, but how do you compare the dates?

+3
source share
4 answers

I would recommend installing an excellent dateutil module. (On Ubuntu / Debian, it is provided by the python-dateutil package).

dateutil can parse date strings in datetime objects: it can handle many different date formats without having to lift a finger (*):

import dateutil.parser as dparser
date=dparser.parse("Mon May 7 1883 10:36:28")
print(date)
# 1883-05-07 10:36:28

date=dparser.parse("1685-3-21")
print(date)
# 1685-03-21 00:00:00

date=dparser.parse("12/17/1770")
print(date)
# 1770-12-17 00:00:00

, "12/17/1770" "MM/DD/YYYY". , parse dayfirst yearfirst. (. http://labix.org/python-dateutil)

print(type(date))
# <type 'datetime.datetime'>

datetime :

dates=[dparser.parse("Mon May 7 1883 10:36:28"),dparser.parse("1685-3-21"),dparser.parse("12/17/1770"),]
dates.sort()
print(dates)
# [datetime.date(1685, 3, 21), datetime.date(1770, 12, 17), datetime.date(1833, 5, 7)]

dateutil, datetime. , . "% Y-% m-% d" YYYY-MM-DD. . http://au2.php.net/strftime ( strftime) .

,

dates=[datetime.datetime.strptime(date_str,'%Y-%m-%d') for date_str in
       ('1883-5-7','1685-3-21','1770-12-17',)]
print([str(date) for date in dates])
# ['1883-05-07 00:00:00', '1685-03-21 00:00:00', '1770-12-17 00:00:00']
dates.sort()
print([str(date) for date in dates])
# ['1685-03-21 00:00:00', '1770-12-17 00:00:00', '1883-05-07 00:00:00']

datetime , datetime.datetime.strftime().

+5

ISO-8601 (YYYY-MM-DD), , (datetime.strptime).

, , sorted(records, key=lambda a:a[1]), .

+2

, 1 CSV:

>>> import csv
>>> from datetime import datetime
>>> def date_key(row):
        return datetime.strptime(row[1].strip(), "%m/%d/%Y")

>>> with open('c:\\temp\\test\\date_test.csv', 'rb') as f:
        data = list(csv.reader(f))

>>> data
[['foo', ' 3/11/2004'], ['bar', ' 2/15/2001'], ['baz', '11/15/2007'], ['bat', '10/13/2002']]
>>> data.sort(key=date_key)
>>> data
[['bar', ' 2/15/2001'], ['bat', '10/13/2002'], ['foo', ' 3/11/2004'], ['baz', '11/15/2007']]
+2
source

Source: https://habr.com/ru/post/1723521/


All Articles