You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中strptime()日期格式匹配失败问题求助

Python strptime() 日期格式匹配问题

我在使用Python的strptime()转换日期格式时遇到了问题,找不到正确的匹配格式。

我的process_row函数代码片段如下:

def process_row(row: 'RowType', dt_format="%Y-%m-%d %H:%M"):
    start_time = f"{row['Meeting Date'][:10]} {row['Meeting Time'][:5]}"
    print(start_time)

    row.update(
        start_time=datetime.strptime(start_time, dt_format),
        # Zoom expects the `duration` value in minutes.
        duration=int(row['Duration Hr']) * 60 + int(row['Duration Min']),

print(start_time)输出显示为2023-05-12 15:00,但使用格式串%Y-%m-%d %H:%M匹配时却抛出错误:

raise ValueError("time data %r does not match format %r" %
ValueError: time data ' ' does not match format '%Y-%m-%d %H:%M'

我推测错误中的空格是拼接字符串或格式串的空格导致的,尝试过修改数据格式、调整Excel中的日期信息、仅匹配四位年份等方法,均未解决问题。我的需求是将字符串转换为日期对象,用于创建Zoom会议。我是Python新手,可能忽略了一些明显的问题,完整代码如下:

from zoom_api_helper import ZoomAPI
from datetime import datetime
from zoom_api_helper.models import *

def main():
    zoom = ZoomAPI('REDACTED', 'REDACTED', 'REDACTED')

    col_name_to_kwarg = {'Group Name': 'agenda',
                         'Zoom Username': 'host_email'}

    def process_row(row: 'RowType', dt_format="%Y-%m-%d %H:%M"):
        start_time = f"{row['Meeting Date'][:10]} {row['Meeting Time'][:5]}"
        print(start_time)

        row.update(
            start_time=datetime.strptime(start_time, dt_format),
            duration=int(row['Duration Hr']) * 60 + int(row['Duration Min']),
        )
        return True

    def update_row(row: 'RowType', resp: dict):
        row['Meeting URL'] = resp['join_url']
        row['Meeting ID'] = resp['id']
        row['Passcode'] = resp['password']

    zoom.bulk_create_meetings(
        col_name_to_kwarg,
        excel_file='./meeting-info.xlsx',
        default_timezone='America/Sao_Paulo',
        process_row=process_row,
        update_row=update_row,
    )

问题排查与解决方法

1. 核心问题:实际传入的是空白字符串

报错提示time data ' ',说明某一行的start_time实际是空白字符,而非你打印的正常日期时间。这大概率是因为该行的Meeting Date或Meeting Time为空,或者切片后得到空字符串,拼接后变成了空格。

解决:添加数据有效性检查

def process_row(row: 'RowType', dt_format="%Y-%m-%d %H:%M"):
    # 提取字段并检查非空
    meeting_date = row.get('Meeting Date', '')
    meeting_time = row.get('Meeting Time', '')
    
    if not meeting_date or not meeting_time:
        print(f"跳过无效行:缺少日期或时间数据,行内容:{row}")
        return False  # 告诉批量处理函数跳过该行
    
    start_time = f"{meeting_date[:10]} {meeting_time[:5]}"
    print(start_time)
    
    row.update(
        start_time=datetime.strptime(start_time, dt_format),
        duration=int(row['Duration Hr']) * 60 + int(row['Duration Min']),
    )
    return True

2. 可能的隐藏问题:Excel日期不是字符串格式

如果Excel中的Meeting Date是日期类型,读取后可能是datetime对象而非字符串,直接切片可能得到异常结果(比如空字符串)。

解决:先转换为字符串再处理

meeting_date_str = str(row['Meeting Date'])[:10]
meeting_time_str = str(row['Meeting Time'])[:5]
start_time = f"{meeting_date_str} {meeting_time_str}"

3. 不可见字符干扰

打印的日期看起来正常,但可能包含全角空格、制表符等不可见字符,导致格式匹配失败。

解决:清理字符串中的多余字符

# 去除两端空白,并用单个空格替换中间的多个空白字符
import re
start_time = re.sub(r'\s+', ' ', f"{row['Meeting Date'][:10]} {row['Meeting Time'][:5]}").strip()

4. 精准调试确认数据

用repr()打印字符串的真实内容,能看到不可见字符或空值:

print(f"当前行:{row},start_time原始内容:{repr(start_time)}")

内容的提问来源于stack exchange,提问作者abcdario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:55:05