我正在用python编写脚本,以便导航到桌面上的文件夹,读取文件(使用glob模式,因为我每天都要添加文件),并将它们的内容复制到一个单独的.txt文件中。
我写了以下脚本:
#!/usr/bin/env python3
with open('../python_diary.txt', 'w') as outfile:
for filename in glob.glob('../Desktop/diary/*-2020.txt'):
with open(filename) as infile:
for line in infile:
outfile.write(line)脚本一般运行良好,但我的文件采用dd-mm-yyyy格式,在启动脚本时,它们按以下顺序出现在我的目标文件中(直到今天):19-06-2020 17-06-2020 16-06-2020 18-06-2020
知道如何使这些连接文件从最老的到最新的出现吗?
谢谢,
发布于 2020-06-19 18:39:43
您可以在glob上执行一个排序,只需一些技巧就可以到达日期时间。假设您的时间戳都是零填充的月份和天,有4位数的年份,这将适用于您:
import os
from glob import glob
# Grab the filenames matching this glob
filenames = glob.glob('../Desktop/diary/*-2020.txt')
# Sort the filenames by ascending date
def filename_to_isodate(filename):
date = os.path.basename(filename).rsplit('.', 1)[0][-10:]
return date[-4:] + date[3:5] + date[:2]
filenames = sorted(filenames, key=filename_to_isodate)
for filename in filenames:
... # Your stuff here... os.path.basename给出了文件的名称,例如‘./Desktop/日记/01-01-2020.txt’变成'01-01-2020.txt‘
rsplit('.', 1)[0][-:10]将基名除以句号,有效地剥离了扩展,并且只获取扩展之前的内容。[-10:]只抓取组成日期的10个字符,在本例中,年份为4个+月份为2个+日为2个+2个破折号=10个字符。
最后,在排序中,我们使用sorted和key来告诉函数按ISO日期(年份、月、日)进行排序。
编辑:根据@Daniel的输入,strptime模块的datetime将被简单地使用ISO字符串格式的日期进行排序以达到速度目的。下面是这个答案中使用的原始方法。
内置的datetime模块可以用给定的格式解析日期时间,在本例中是:%d-%m-%Y。strptime给出了一个可以进行数值处理的datetime对象,这意味着它可以进行比较和排序。os.path.basename(s).rsplit('.',1),'%d-%m-%Y‘
https://stackoverflow.com/questions/62476302
复制相似问题