python自动提取文本中的时间(包含中文日期)

下面我会详细讲解如何使用Python自动提取文本中的时间,其中也会包含中文日期的处理办法。

如何自动提取文本中的时间

使用Python自动化提取文本中的时间可以分成以下几个步骤:

  1. 将文本中出现的时间字符串通过正则表达式或第三方库进行提取。
  2. 将提取出的时间字符串进行解析和格式化,得到标准的时间格式数据。
  3. 对于中文日期需要进行额外的处理,例如将“两天前”、“昨天”、“今天”等关键词转化为具体日期。

下面分别对这几个步骤进行详细的讲解。

步骤一:提取时间字符串

在Python中,我们可以使用正则表达式或第三方库进行时间字符串的提取。其中比较常用的有re库和dateutil库。

1. 使用re库提取时间字符串

通过使用re库中的findall方法可以快速提取出文本中所有符合时间格式的字符串。同时,通过引入datetime模块可以提供对于时间格式的基本验证。

以下代码是使用re库提取文本中的时间字符串的示例:

import re
import datetime

text = "2022-01-01 12:00:00, 2022-01-02 12:00:00, 2022-01-03 12:00:00"

date_pattern = "\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"
date_list = re.findall(date_pattern, text)

for date_str in date_list:
    try:
        date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
        print(date_obj)
    except ValueError:
        pass

这段代码中,首先定义了一个包含时间字符串的文本变量text。然后,使用正则表达式提取出所有符合时间格式的字符串,并保存到变量date_list中。最后,遍历date_list中的每个时间字符串,通过datetime.strptime方法将其转换为datatime类型并输出。

2. 使用dateutil库提取时间字符串

除了使用正则表达式,我们也可以使用dateutil库来提取时间字符串。dateutil库的好处在于它对于时间的识别更为准确。简单来说,dateutil库可以根据上下文自动识别不同的时间格式,从形式上更加优雅。

以下代码是使用dateutil库提取文本中的时间字符串的示例:

from dateutil import parser

text = "2022-01-01 12:00:00, 2022-01-02 12:00:00, 2022-01-03 12:00:00"

date_list = parser.parse(text, fuzzy=True)

for date_obj in date_list:
    print(date_obj)

这段代码中,我们导入了dateutil库中的parser模块。然后,使用parser.parse方法将文本中的所有时间字符串解析为datetime对象。

步骤二:解析时间字符串

在解析时间字符串时,我们需要注意文本中出现的不同时间格式。对于常见的时间格式,我们可以使用datetime库中的一些内置方法来解析和格式化。同时,在解析时间字符串时,我们也需要注意到字符串中的时区信息,以避免时区问题导致时间的错位。

以下是解析时间字符串的示例代码:

from dateutil import parser
import pytz

time_data = "2022-01-01 12:00:00"

# 解析时间字符串,生成datetime对象
date_obj = parser.parse(time_data)

# 将时间转化为指定时区
tz = pytz.timezone('Asia/Shanghai')
dt_with_tz = tz.localize(date_obj)

# 将时间格式化为指定字符串
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
time_str = dt_with_tz.strftime(fmt)

print(time_str)

这段代码中,我们首先使用了dateutil库的parser模块将时间字符串解析为datetime对象。然后,使用pytz库将datetime对象转化为指定时区的datetime对象。最后,使用datetime对象的strftime方法将时间对象转化为指定格式的字符串。

步骤三:处理中文日期

对于中文日期,我们可以使用第三方库如chinese-calendar和lunarcalendar,或者自定义关键词映射表的方式来实现。

1. 使用chinese-calendar库

chinese-calendar库是一个针对中国农历和公历处理的库。我们可以使用这个库来自动将中文日期转化为标准日期。

以下是处理中文日期的示例代码:

from chinese_calendar import is_workday, is_holiday
from datetime import datetime
import jieba

text = "2022年3月4日下午7点"

# 将文本中的中文日期转化为datetime对象
date_str = ''.join(jieba.lcut(text, cut_all=True, HMM=False))
date_str = date_str.replace('年', '-').replace('月', '-').replace('日', '')
date_obj = datetime.strptime(date_str, '%Y-%m-%d %H:%M')

# 判断日期是否为工作日或者节假日
if is_workday(date_obj):
    print("是工作日")
elif is_holiday(date_obj):
    print("是节假日")
else:
    print("日期无法识别")

这段代码中,我们导入了chinese_calendar库中的is_workday和is_holiday方法。然后,使用jieba库将中文日期中的“年”、“月”、“日”字符进行分割,组成string类型时间变量date_str。最后,使用datetime类的strptime方法将date_str转化为datatime类型对象,并调用is_workday和is_holiday方法进行节假日判断。

2. 自定义关键词映射表

自定义关键词映射表是一种将中文日期转化为标准日期的另一种方式。我们可以手动定义一个关键词映射表,将常见的中文日期关键词对应到具体的日期上。

以下是自定义关键词映射表的示例代码:

import datetime

text = "两天前"

keymap = {
    "今天": 0,
    "昨天": 1,
    "前天": 2,
    "大前天": 3,
    "两天前": 2,
    "三天前": 3,
}

now = datetime.datetime.now()
delta = datetime.timedelta(days=keymap[text])
target_date = now - delta

print(target_date)

这段代码中,我们手动定义了一个关键词映射表keymap,将不同的中文日期关键词对应到具体的日期。然后,我们根据关键词将对应的天数计算出来,通过datetime.timedelta生成一个与当前时间指定天数相差的时间差delta,最后计算目标日期并输出。

总结

以上就是使用Python自动提取文本中的时间的完整攻略。在实际使用中,我们可以根据文本中时间格式的具体情况选择不同的提取方式,并对中文日期进行特殊处理。

另外,还需要注意到时区和节假日等问题,以保证处理后的时间数据的准确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动提取文本中的时间(包含中文日期) - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • python3 cvs将数据读取为字典的方法

    在使用 Python 读取 CSV 文件时,我们可以使用标准库中的 csv 模块,该模块提供了读取 CSV 文件的功能。同时,结合 Python 3 中的字典、列表等数据结构可以实现将 CSV 数据读取为字典类型。 下面是具体的步骤: 1.导入 csv 模块 在 Python 代码中引入 csv 模块: import csv 2.打开 CSV 文件并创建一个…

    python 2023年5月13日
    00
  • Pycharm中Python环境配置常见问题解析

    Pycharm中Python环境配置常见问题解析 在使用Pycharm进行Python开发时,我们需要配置Python环境。但是,在配置Python环境时,我们可能会遇到各种问题。本文详细讲解Pycharm中Python环境配置常见问题解析,包括问题的原因、解决方法和两个示例。 问题原因 在Pycharm中配置Python环境时,可能会遇到以下问题: Pyt…

    python 2023年5月13日
    00
  • Python如何执行精确的浮点数运算

    在Python中进行浮点数运算时,由于内存存储的限制,可能会导致一些不精确的计算。下面介绍一些让Python进行精确浮点数计算的方法。 1. 使用decimal模块 decimal是Python的一个模块,可用于精确、定点的十进制算术运算。下面是如何使用decimal模块进行浮点数计算的示例代码: from decimal import Decimal nu…

    python 2023年6月3日
    00
  • Python的三种主要模块介绍

    Python是一种高级编程语言,具有广泛的应用领域。Python的三种主要模块是标准库、第三方库和自定义库。本文将详细介绍这三种模块,并提供两个示例。 标准库 Python的标准库是Python自带的一组模块,包含了大量的常用功能,如文件操作、网络通信、正则表达式、日期时间处理等。标准库是Python开发的基础,可以帮助开发者快速实现各种功能。 以下是一个示…

    python 2023年5月15日
    00
  • Python7个爬虫小案例详解(附源码)中篇

    Python7个爬虫小案例详解中篇攻略 简介 本文介绍了《Python7个爬虫小案例详解》的中篇,涉及到的7个爬虫小案例分别是:爬取糗事百科段子、爬取妹子图、爬取当当图书、爬取百度百科、爬取链家租房信息、爬取香港天文台天气预报和爬取斗鱼直播。本文将对这些案例进行详细讲解,并附上源码供参考。 篇章内容 爬取糗事百科段子 本案例涉及到的技术点主要有:reques…

    python 2023年5月14日
    00
  • 详解用python -m http.server搭一个简易的本地局域网

    用 Python http.server 搭建一个简易的本地局域网 在 Python 中,可以使用内置模块 http.server 来搭建一个简易的本地局域网。以下是详解用 Python http.server 搭建一个简易的本地局域网的方法。 1. 启动 http.server 首先,我们需要在终端中进入到要共享的文件夹目录下,然后使用以下命令启动 htt…

    python 2023年5月15日
    00
  • Python:3个元素的排列[重复]

    【问题标题】:Python: Permutations of 3 Elements [duplicate]Python:3个元素的排列[重复] 【发布时间】:2023-04-05 16:09:01 【问题描述】: 如何在 Python 中找到包含 3 个元素的列表的所有排列? 例如输入 [1, 2, 3, 4] 会回来 [1, 2, 3] [1, 2, 4]…

    Python开发 2023年4月5日
    00
  • 微信跳一跳python代码实现

    下面是详细讲解“微信跳一跳Python代码实现”的完整攻略。 简介 “微信跳一跳” 是一款由腾讯推出的小程序游戏,用手指按住屏幕弹跳到下一级并收集积分。 本攻略将介绍如何使用 Python 代码实现自动跳一跳。 准备工作 在开始编写代码之前,需要先做好以下准备工作: 安卓模拟器 ADB 工具 Python 3.x 环境 相关 Python 库 实现步骤 步骤…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部