
本文将详细讲解如何在Python中处理日期格式转换问题,解决AttributeError: 'str' object has no attribute 'strftime'错误。摘要如下:
在编写Python程序时,经常需要在不同函数之间传递日期数据。如果一个函数返回的日期是字符串格式,而另一个函数需要日期对象作为输入,就会出现类型不匹配的错误。本文将通过一个实际案例,演示如何将字符串格式的日期转换为日期对象,以便在函数间正确传递和使用,避免AttributeError。
问题的核心在于derivatives_df函数的expiry_date参数需要一个date对象,而oi_data函数返回的是一个格式化后的字符串。错误信息AttributeError: 'str' object has no attribute 'strftime'表明,程序尝试在一个字符串对象上调用strftime方法,而该方法是datetime对象才拥有的。
要解决这个问题,需要在oi_data函数中,将日期字符串转换为date对象,然后再传递给fut_data函数。
立即学习“Python免费学习笔记(深入)”;
原始代码:
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)修改后的代码:
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() # 修改为获取date对象
print(exp_dt)
return exp_dt
def fut_data(Symbols, exp_dt): # 修改函数签名,接收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) # 传递exp_dt关键修改:
通过将oi_data函数返回的日期字符串转换为date对象,并将其传递给fut_data函数,我们成功解决了AttributeError。这个例子展示了在Python中处理日期格式转换的重要性,以及如何确保数据类型在不同函数间的一致性。 记住,理解数据类型和函数参数要求是避免类似错误的关键。
以上就是解决Python日期格式化问题:从字符串到日期对象的转换的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号