【问题标题】:sort dated and monthed filenames chronologically [duplicate]按时间顺序对日期和月份的文件名进行排序[重复]
【发布时间】:2021-12-31 21:43:11
【问题描述】:

我有几个格式如下的 txt 文件。它们都位于名为folder_path 的同一目录中,并且都以格式“date Month 2019”开头,然后是文件名的其余部分,然后是“.txt”。每个文件都有不同的名称和不同的日期和月份。

4 JUN 2019 file name something.txt
1 JUN 2019 file name something.txt
18 APR 2019 file name.txt
15 APR 2019 file name.txt
13 APR 2019 file name.txt

我需要按时间顺序、月份和日期对它们进行排序,而不更改文件名的其余部分。所以文件应该是这样的:

13 APR 2019 somename.txt
15 APR 2019 somename.txt
18 APR 2019 filename.txt
1 JUN 2019 somename.txt
4 JUN 2019 somename.txt

我正在考虑使用 sorted 并计算前 7 位数字,或者将日期和月份与文件名分开。我做了这样的事情,但什么也没发生。我对 Python 很陌生,所以感谢任何解决方案。

def first_7chars(filename):
    return(filename[0:8])

sorted(folder_path, key = first_7chars)

【问题讨论】:

  • 对于sorted(folder_path),如果folder_path 是一个字符串,它将对字符串本身的字符进行排序,而不是对目录中的文件进行排序。因此,我添加了一个关于如何为您获取目录中的文件名的重复链接。

标签: python sorting filenames


【解决方案1】:

您可以在sorted 函数中使用datetime.datetime

files = ['4 JUN 2019 file name something.txt',
'1 JUN 2019 file name something.txt',
'18 APR 2019 file name.txt',
'15 APR 2019 file name.txt',
'13 APR 2019 file name.txt']

from datetime import datetime
out = sorted(files, key=lambda file: datetime.strptime(' '.join(file.split()[:3]), '%d %b %Y'))

输出:

['13 APR 2019 file name.txt',
 '15 APR 2019 file name.txt',
 '18 APR 2019 file name.txt',
 '1 JUN 2019 file name something.txt',
 '4 JUN 2019 file name something.txt']

【讨论】:

  • 哦,太好了,我没想到%d 会直接工作,因为文档说Day of the month as a zero-padded decimal number。这样就省事了。
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2014-12-13
  • 2021-11-03
  • 2021-08-19
相关资源
最近更新 更多