首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python文件读写-脚本

Python文件读写-脚本
EN

Stack Overflow用户
提问于 2020-06-19 18:16:04
回答 1查看 49关注 0票数 0

我正在用python编写脚本,以便导航到桌面上的文件夹,读取文件(使用glob模式,因为我每天都要添加文件),并将它们的内容复制到一个单独的.txt文件中。

我写了以下脚本:

代码语言:javascript
复制
#!/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

知道如何使这些连接文件从最老的到最新的出现吗?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-19 18:39:43

您可以在glob上执行一个排序,只需一些技巧就可以到达日期时间。假设您的时间戳都是零填充的月份和天,有4位数的年份,这将适用于您:

代码语言:javascript
复制
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个字符。

最后,在排序中,我们使用sortedkey来告诉函数按ISO日期(年份、月、日)进行排序。

编辑:根据@Daniel的输入,strptime模块的datetime将被简单地使用ISO字符串格式的日期进行排序以达到速度目的。下面是这个答案中使用的原始方法。

内置的datetime模块可以用给定的格式解析日期时间,在本例中是:%d-%m-%Ystrptime给出了一个可以进行数值处理的datetime对象,这意味着它可以进行比较和排序。os.path.basename(s).rsplit('.',1),'%d-%m-%Y‘

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62476302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档