首页 > 解决方案 > 如何读取存储在给定文件夹中的多个文件并从所有文件中获取特定日期值——Python

问题描述

一个文件夹中有多个文本文件,要求编写一个 python 代码来读取所有文本文件并从每个文本“$published_date:”(例如,published_date: January 02 2020)后面提取日期字段文本文件。

文件由几行以及打印在第二行的“$Publisher_Date:”组成。

所有文件如下所示:-

$Publisher_Name:ABC Corp. $Publisher_Date:2020 年 1 月 2 日。此副本由 xyz 撰写。


所需的输出是打印所有日期值(以下格式)和以下格式的相应文件:-

在此处输入图像描述

我是 python 的新手,并试图从文件夹“/home/bin/”中读取文件,但之后没有太多线索如何从这些文件中提取日期并转换为特定的日期格式。任何帮助将不胜感激。

导入全局导入错误

path = '/home/bin/*.txt' files = glob.glob(path) for name in files: try: with open(name) as f:

标签: pythonpython-3.xlist

解决方案


需要明确的是 - 您只是想将日期附加到已编辑的文件名吗?

严格地说,这会做我认为你所要求的。我实际上会做几件事——但这取决于用例。

os.path.getctime从/中提取创建/修改日期getmtime- 更加稳定和可靠,并使用datetime.datetime.fromtimestamp.

如果您确实必须从文件名本身中提取此信息,请创建自定义文件名。例如 - 使用下划线将日期附加到文件名 file_date = datetime.datetime.strftime(parse(date),'%Y_%m_%d') file_name = name.split('/')[0] + file_date + '.txt'

或者,如果可以,请询问向您发送此数据的人以修改约定。

无论如何,一旦您获得了文件列表,这将起作用。

我以您的演示文件为起点 - 您可以轻松地将输出存储为元组、字典或列表。我只是选择了列表,因为它与 imo 一起使用会更好一些。

import datetime
from dateutil.parser import parse


fnames = ['$Publisher_Name: ABC Corp. $Publisher_Date: January 02 2020. This copy was authored by xyz.'
          ,'$Publisher_Name: XYZ Corp. $Publisher_Date: January 06 2020. This copy was authored by xyz.']

new_fnames = []
for fname in fnames:
    blank,name,date = [i.split(': ')[-1].split('.')[0].replace(' ','/') for i in fname.split('$Publisher')]
    file_date = datetime.datetime.strftime(parse(date),'%Y/%m/%d')
    file_name = name.split('/')[0] + '.txt'
    new_fnames.append([file_name + ',' + file_date])

推荐阅读