[Python] datetime.strptime校验日期和时间的格式

本文介绍了Python的datetime.strptime方法,用于将字符串转换为datetime对象,并通过示例展示如何使用该方法校验CSV文件中日期和时间的格式。在处理上万行CSV数据时,该方法能有效检测并指出日期格式错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 方法

datetime.strptime() 是 Python 中的一个方法,用于将字符串解析为 datetime 对象,它的语法如下:

datetime.strptime(date_string, format)

其中:

date_string 是要解析的日期时间字符串。
format 是日期时间字符串的格式说明,例如 %Y-%m-%d %H:%M:%S 表示年-月-日 时:分:秒。
这个方法会返回一个 datetime 对象,表示解析后的日期时间。如果解析失败,则会抛出 ValueError 异常。

不妨“拿来主义”用这个方法来校验日期或时间的格式是否正确,省去了写长长的正则表达式。

2.举例:dateformat.py 校验日期+时间格式

from datetime import datetime

def validate_date(date_string, date_format):
    try:
        datetime.strptime(date_string, date_format)
        return True
    except ValueError:
        return False

date_string = "2024-5-15"
date_format = "%Y-%m-%d"

if validate_date(date_string, date_format):
    print("Valid date format")
else:
    print("Invalid date format")

3.应用

现在有一个上万行的CSV文件,第一列是日期,格式 %Y-%m-%d;第二列是日期+时间,格式%Y-%m-%d %H:%M:%S,可以用上述方法实现对这两列的校验(36~40行)。

import csv
from datetime import datetime

def validate_datetime(datetime_string, datetime_format):
    try:
        datetime.strptime(datetime_string, datetime_format)
        return True
    except ValueError:
        return False

def validate_date(date_string, date_format):
    try:
        datetime.strptime(date_string, date_format)
        return True
    except ValueError:
        return False

datetime_format = "%Y-%m-%d %H:%M:%S"
date_format = "%Y-%m-%d"

def check_format(csv_file, output_file):
    with open(csv_file, 'rb') as csvfile, open(output_file, 'w') as outfile:
        reader = csv.reader(csvfile, delimiter='\t')
        next(reader)  # Skip the header row

        for row_num, row in enumerate(reader, start=2):  # Start from the second row
            # Strip whitespace from each field
            stripped_row = [field.strip() for field in row]
            error_messages = []  # List to store error messages

            if len(stripped_row) != 8:
                error_messages.append("Error in row {}: Incorrect number of fields".format(row_num))
            else:

                if not validate_date(stripped_row[0], date_format):
                    error_messages.append("Error in row {}: Incorrect date format: {}".format(row_num,stripped_row[0]))
                if not validate_date(stripped_row[1], datetime_format):
                    error_messages.append("Error in row {}: Incorrect datetime format: {}".format(row_num,stripped_row[1]))

            if error_messages:
                for error_message in error_messages:
                    outfile.write(error_message + '\n')
            #else:
                #outfile.write("Correct\n")

# csv_file_path is the file to check
csv_file_path = '/var/tmp/CpuMemory_202405141800.tsv'
output_file_path = './output_errors.txt'
check_format(csv_file_path, output_file_path)

可以校验出时间格式有误的行

# grep 'Incorrect date' output_errors.txt | head -10
Error in row 12966: Incorrect date format: 2024-02024-05-14
Error in row 19243: Incorrect datetime format: 2024-05-14 188:00:00
Error in row 20881: Incorrect date format: 024-05-14
Error in row 27704: Incorrect datetime format: 2024-05-14 18:0024-05-14 18:00:00
Error in row 28318: Incorrect datetime format: 2024-05-14 -14 18:00:00
Error in row 28932: Incorrect datetime format: 2024-05-14 18:00:8:00:00
Error in row 29478: Incorrect datetime format: 2024-05-14 18:05-14 18:00:00
Error in row 30706: Incorrect datetime format: 2000:00
Error in row 39645: Incorrect datetime format: 2024-05-14 10:00
Error in row 40805: Incorrect datetime format: 2024-05-14 18:00:00:00
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值