如何解决Python中Excel提取日期与输入日期的匹配失效问题?
问题:datetime与date类型不匹配导致条件判断失效
问题描述
第一次使用datetime库遇到问题:
- 输入值
date_str通过strptime转换为datetime.date类型 - 从Excel文件提取的
date是datetime.datetime类型(包含时分秒信息) - 由于类型不匹配,
if date == new_date语句无法生效,同时希望提取日期时能去除时分秒信息。
相关代码
def read_file(filename): wb = openpyxl.load_workbook(filename) sheet = wb.active data = [] for row in sheet.iter_rows(min_row=2, values_only=True): data.append(row) return data def main(): filename = input("Enter file name: ") data = read_file(filename) date_str = input("Enter date YYYY-MM-DD: ") new_date = datetime.strptime(date_str, "%Y-%m-%d").date() for date in data: if date == new_date: print(f"Date: {date}")
解决方案
方法1:字符串匹配(提问者自行解决的方法)
保留用户输入的字符串格式,将从文件提取的datetime对象转换为指定格式的字符串进行匹配:
date_str = input("Enter date YYYY-MM-DD: ") for date in data: if date.strftime("%Y-%m-%d") == date_str: print(f"Date: {date}")
方法2:统一转换为date类型
将从文件提取的datetime对象转换为date类型,和用户输入转换后的date对象直接比较:
date_str = input("Enter date YYYY-MM-DD: ") new_date = datetime.strptime(date_str, "%Y-%m-%d").date() for date in data: # 将datetime转换为date类型 if date.date() == new_date: print(f"Date: {date}")
方法3:读取文件时直接转换为date类型
在读取Excel文件的阶段,就把提取到的datetime对象转换为date类型,后续无需额外处理:
def read_file(filename): wb = openpyxl.load_workbook(filename) sheet = wb.active data = [] for row in sheet.iter_rows(min_row=2, values_only=True): # 假设每行第一个元素是日期,转换为date类型 converted_row = (row[0].date(),) + row[1:] if row else row data.append(converted_row) return data
处理后后续的if date == new_date判断即可直接生效。
内容的提问来源于stack exchange,提问作者ar809
相关产品推荐
相关产品推荐

