0

0

解决日期格式化问题:在函数间传递日期数据

碧海醫心

碧海醫心

发布时间:2025-07-21 15:42:11

|

717人浏览过

|

来源于php中文网

原创

解决日期格式化问题:在函数间传递日期数据

正如摘要中所述,本文旨在解决在Python函数间传递日期数据时,由于日期格式不匹配导致的 AttributeError 错误。

在使用Python进行数据处理时,经常需要在不同的函数之间传递日期数据。如果日期格式不一致,可能会导致程序出错。本教程将针对一个常见的错误场景,提供详细的解决方案。

问题描述

假设我们有两个函数:oi_data 和 fut_data。oi_data 函数从API获取数据,并提取出到期日信息,将其格式化为特定的字符串格式。fut_data 函数则需要使用这个到期日信息作为参数,从另一个数据源获取数据。

from jugaad_data.nse import derivatives_df
from datetime import timedelta, date
from datetime import datetime
import pandas as pd
import requests
import json

def oi_data(Symbols):
  baseurl = "https://www.nseindia.com/"
  url = f'https://www.nseindia.com/api/option-chain-equities'
  headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ''like Gecko) ''Chrome/80.0.3987.149 Safari/537.36','accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}
  session = requests.Session()
  request = session.get(baseurl, headers=headers, timeout=30)
  cookies = dict(request.cookies)
  params=[('symbol', Symbols)]
  res = session.get(url, headers=headers, params=params, cookies=cookies, timeout=30)
  res_text = res.text
  data = json.loads(res_text)
  exp_dt1 = data["records"]["expiryDates"][0]
  datetime_obj = datetime.strptime(exp_dt1, '%d-%b-%Y')
  exp_dt = datetime_obj.strftime("%Y, %m, %d") #问题所在
  print(exp_dt)
  return exp_dt

def fut_data(Symbols):
    ticker_df = derivatives_df(symbol=Symbols, from_date = date.today() - timedelta(days = 30), to_date= date.today(),expiry_date=date(2023,11,30), instrument_type="FUTSTK")
    fut_df = ticker_df
    print(fut_df)
    return fut_df

Symbols = ['MARUTI']
for symbol in Symbols:
    exp_dt = oi_data(symbol)
    fut_df = fut_data(symbol)

上述代码中,oi_data 函数将日期格式化为字符串 "%Y, %m, %d",然后将其传递给 fut_data 函数。fut_data 函数期望接收的是 datetime.date 对象,因此会报错:AttributeError: 'str' object has no attribute 'strftime'。

解决方案

问题的根源在于日期格式不匹配。 derivatives_df 函数期望 expiry_date 参数是一个 datetime.date 对象,而不是字符串。我们需要修改 oi_data 函数,使其返回 datetime.date 对象。

Meku
Meku

AI应用和网页开发工具

下载

修改 oi_data 函数的代码如下:

def oi_data(Symbols):
  baseurl = "https://www.nseindia.com/"
  url = f'https://www.nseindia.com/api/option-chain-equities'
  headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ''like Gecko) ''Chrome/80.0.3987.149 Safari/537.36','accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}
  session = requests.Session()
  request = session.get(baseurl, headers=headers, timeout=30)
  cookies = dict(request.cookies)
  params=[('symbol', Symbols)]
  res = session.get(url, headers=headers, params=params, cookies=cookies, timeout=30)
  res_text = res.text
  data = json.loads(res_text)
  exp_dt1 = data["records"]["expiryDates"][0]
  datetime_obj = datetime.strptime(exp_dt1, '%d-%b-%Y')
  exp_dt = datetime_obj.date() # 修改这里
  print(exp_dt)
  return exp_dt

通过将 exp_dt = datetime_obj.strftime("%Y, %m, %d") 替换为 exp_dt = datetime_obj.date(),我们将 datetime 对象转换为 date 对象。

同时,需要修改调用 fut_data 函数的方式,将 exp_dt 作为参数传递进去:

def fut_data(Symbols, exp_dt):
    ticker_df = derivatives_df(symbol=Symbols, from_date = date.today() - timedelta(days = 30), to_date= date.today(),expiry_date=exp_dt, instrument_type="FUTSTK")
    fut_df = ticker_df
    print(fut_df)
    return fut_df

Symbols = ['MARUTI']
for symbol in Symbols:
    exp_dt = oi_data(symbol)
    fut_df = fut_data(symbol, exp_dt) # 修改这里

完整代码

from jugaad_data.nse import derivatives_df
from datetime import timedelta, date
from datetime import datetime
import pandas as pd
import requests
import json

def oi_data(Symbols):
  baseurl = "https://www.nseindia.com/"
  url = f'https://www.nseindia.com/api/option-chain-equities'
  headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ''like Gecko) ''Chrome/80.0.3987.149 Safari/537.36','accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}
  session = requests.Session()
  request = session.get(baseurl, headers=headers, timeout=30)
  cookies = dict(request.cookies)
  params=[('symbol', Symbols)]
  res = session.get(url, headers=headers, params=params, cookies=cookies, timeout=30)
  res_text = res.text
  data = json.loads(res_text)
  exp_dt1 = data["records"]["expiryDates"][0]
  datetime_obj = datetime.strptime(exp_dt1, '%d-%b-%Y')
  exp_dt = datetime_obj.date()
  print(exp_dt)
  return exp_dt

def fut_data(Symbols, exp_dt):
    ticker_df = derivatives_df(symbol=Symbols, from_date = date.today() - timedelta(days = 30), to_date= date.today(),expiry_date=exp_dt, instrument_type="FUTSTK")
    fut_df = ticker_df
    print(fut_df)
    return fut_df

Symbols = ['MARUTI']
for symbol in Symbols:
    exp_dt = oi_data(symbol)
    fut_df = fut_data(symbol, exp_dt)

总结与注意事项

  • 在函数间传递日期数据时,务必确保日期格式一致。
  • 如果函数需要 datetime.date 对象,则不要传递字符串格式的日期。
  • 可以使用 datetime.strptime() 将字符串转换为 datetime 对象,然后使用 .date() 方法提取日期部分。
  • 在函数定义中明确指定参数类型,可以帮助避免类型错误。

通过以上步骤,我们可以解决日期格式不匹配导致的 AttributeError 错误,使程序能够正确地处理日期数据。希望本教程能够帮助您更好地理解和应用Python中的日期处理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1500

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

623

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

613

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

588

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

170

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

83

2025.08.07

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

0

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号