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

yizhihongxing

下面我会详细讲解如何使用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日

相关文章

  • Python中的集合介绍

    Python中的集合介绍 在Python中,集合是一种无序的、可变的数据类型,用于存储不重复的元素。集合是一种非常常用的数据类型,可以用于去重、交、并集操作。本文将详细介绍Python中的集合,包括集合的创建、集合的操作、集合的方法等。 集合的创建 要创建一个集合,我们可以使用set()函数或使用花括号{}。例如: # 创建集合 my_set = set([…

    python 2023年5月13日
    00
  • python之mock模块基本使用方法详解

    Python之mock模块基本使用方法详解 1. 什么是mock模块 mock 模块是 Python 中的一个第三方库,它可以模拟测试,用于替代复杂的对象或者行为,简化了程序的单元测试,提高了测试的灵活性和便利性。 使用Mock模块的例子: from mock import Mock, MagicMock, patch # 1. 创建一个 Mock 对象并且…

    python 2023年5月13日
    00
  • Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

    以下是Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题的完整攻略。 什么是 utf-8-sig 编码格式? 在介绍解决乱码问题之前,我们先来了解一下 utf-8-sig 编码格式。utf-8-sig 和 utf-8 编码格式非常类似,都是一种常见的Unicode编码格式,不同的是utf-8-sig会在文件开头添加一个BOM(Byt…

    python 2023年5月20日
    00
  • python3爬取数据至mysql的方法

    Sure,下面是python3爬取数据至mysql的完整攻略: 1. 安装相关库 在使用python操作mysql之前,需要先安装相关的库: pip install pymysql requests beautifulsoup4 其中,requests库用于发送网络请求,beautifulsoup4库用于解析html/xml文档,pymysql库则用于连接和…

    python 2023年5月14日
    00
  • 详解如何利用Python实现报表自动化

    以下是详解如何利用Python实现报表自动化的完整攻略: 1. 了解报表自动化的概念和优势 报表自动化是指利用计算机技术和相关软件工具,将人工处理数据转变为机器自动执行的过程,以完成数据采集、整理、处理和呈现等任务。报表自动化的优势在于提高工作效率、减少人力成本和错误率、规范化报表格式和内容、便于重复使用和分析等。 2. 选择合适的 Python 技术栈 P…

    python 2023年5月18日
    00
  • python添加菜单图文讲解

    下面详细讲解”Python添加菜单”的攻略。 1. 创建菜单 首先需要导入 tkinter 库,然后调用 Tk() 函数来创建一个窗口。在窗口上添加一个菜单,可以使用 Menu() 函数。该函数需要指定一个 Tk 对象作为参数,并且还可以指定菜单的样式以及添加菜单项。 示例1:添加一个简单的菜单栏 import tkinter as tk root = tk…

    python 2023年6月13日
    00
  • Python的加密模块md5、sha、crypt使用实例

    Python的加密模块md5、sha、crypt使用实例 本文将给出Python中三种加密模块:md5、sha、crypt 的使用实例,分别介绍各自的作用、使用方法和实例应用。 md5模块 md5模块是Python的一个常用的加密模块,主要用于数据校验、数字签名等场景。 md5加密模块常用于生成摘要值,可以将任意一种消息数据(不论大小)传输为一种长度固定的算…

    python 2023年6月3日
    00
  • 对Python _取log的几种方式小结

    对Python _取log的几种方式小结 在Python中,我们可以使用标准数学库中提供的log函数来计算数字的对数。下面是一些常见的通过log函数获取对数的方式: 1. math库中的log函数 Python内置的math库提供了一个log函数,可以计算自然对数。你可以通过以下语句在你的代码中调用: import math x = 10 log_x = m…

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