使用文件名中的日期对CSV文件进行排序



我有一个CSV文件列表,这些文件位于我的谷歌驱动器上的一个文件中。主文件名为all_files,CSV文件如下所示。

all_files

['/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-07-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-12-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-28-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/03-16-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-18-2020.csv']

我正试图找到一种方法,根据文件名中的日期(例如,2020年3月16日至20日(对这些文件进行排序(基本上是1月1日至最新文件日期(,并返回排序后的文件列表,同时保留所有文件数据。我不确定我是否应该将它们作为字符串排序,因为结果排序不会携带文件数据。

感谢提前提供的任何帮助

此解决方案为每个文件名fn构建一个(year, month, day)元组,然后只使用Python的内置排序,该排序将比较元组的前后

# gets 'mm-dd-yyyy' part of filename string
get_date = lambda fn: fn.split('/')[-1].split('.')[0].split('-')
# actual sorting using tuples
sorted(all_files, key=
lambda fn: (get_date(fn)[2], get_date(fn)[0], get_date(fn)[1]))

由于您的日期都在2020年,并且日期之前的月份数字,每个月和日期都有两位数字,两个文件名之间的唯一区别是日期:天真地对字符串列表进行排序会产生正确的顺序。

不过,一般来说,为了正确解析日期,我建议使用datetime.datetime.strptime。您可以将其作为key参数提供给sortedlist.sort:

import datetime
allfiles = [
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-07-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-12-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-28-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/03-16-2020.csv',
'/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-18-2020.csv'
]
naively_sorted = sorted(allfiles)
sorted_by_date = sorted(allfiles,
key=lambda x: datetime.datetime.strptime(x[-14:-4], '%m-%d-%Y'))
print(naively_sorted)
print(sorted_by_date)
# ['/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/03-16-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-18-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-28-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-07-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-12-2020.csv']
# ['/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/03-16-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-18-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/07-28-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-07-2020.csv', '/content/drive/MyDrive/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/11-12-2020.csv']

注意,切片x[-14:-4]不假设字符串的开头是什么样子;但是它确实假设该字符串以CCD_ 9结束。

相关内容

  • 没有找到相关文章

最新更新