python记账小程序接入千帆大模型做账单优化
所需板块:
import os
import requests
import json
wenxin()类:
其中包含了三个方法,分别是:
__init__(self,api_key,secret_key):
用于初始化wenxin()类中的基本变量
access_token(self):
用于向千帆大模型发起请求,获得对应的TOOKEN,并且将获得的TOOKEN返回给__init__方法进行初始化赋值
hui(self,text):
用于进行文本聊天的补全。该方法接受一个文本参数,构建请求的payload并发送请求,最后返回完整的聊天内容
class wenxin():
def __init__(self, api_key, secret_key):
self.API_KEY = api_key
self.SECRET_KEY = secret_key
self.ACCESS_TOKEN = self.access_token()
def access_token(self):
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": self.API_KEY,
"client_secret": self.SECRET_KEY
}
TOKEN = requests.post(url, params=params).json()
return str(TOKEN.get("access_token"))
def hui(self, text):
url = ("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token="+ self.ACCESS_TOKEN)
payload = json.dumps({"messages": [{"role": "user", "content": text}]})
headers = {"Content-Type": "application/json"}
response = requests.request("POST", url, headers=headers, data=payload).json()
return response["result"]
shuanchu:
这段代码定义了一个名为shanchu的类,其中包含了一个初始化方法__init__和一个方法wen。该类的目的是用于删除特定日期的文本文件。
在__init__方法中,类接受三个参数year、month和day,并将它们以"Date:"为键值创建了一个字典self.cidian。然后将日期字符串保存在self.mzi中,并构建了一个文件路径self.file
在wen方法中,尝试使用os模块的remove函数删除一个名为"{self.file}.txt"的文件。如果文件不存在,则会捕获FileNotFoundError并打印出错误消息。
class shanchu:
def __init__(self,year,month,day):
self.cidian={"Date:":year+"-"+month+"-"+day}
self.mzi=self.cidian["Date:"]
self.file=os.path.join(chuangjian,self.mzi)
def wen(self):
try:
os.remove(f"{self.file}.txt")
except FileNotFoundError as e:
print(f"文件不存在:{e}\n")
mulu:
这段代码定义了一个名为mulu
的类,该类包含两方法。在 __init__
方法中,定义了一个属性wenj
,其值为未定义的chuangjian
变量。在 duqu
方法中,首先判断chuangjian
变量指定的路径是否存在且是否是一个目录,然后遍历该目录下的所有文件和子目录,并打印它们的名称。
class mulu:
def __int__(self):
self.wenj=chuangjian
def duqu(self):
if os.path.exists(chuangjian) and os.path.isdir(chuangjian):
for i in os.listdir(chuangjian):
print(i)
xieru:
这段代码定义了一个名为xieru
的类,具有以下功能:
初始化方法__init__
接受参数year, month, day, weather, shuju, xiaofei, mony
,并将这些参数存储在对象的属性中。
cidian
,其中包含日期和天气信息。shengy
,即初始资金减去消费的金额。file
,用于存储数据文件。wen
的方法,用于将数据写入文件:- 首先尝试打开文件进行写入操作,将日期和天气信息写入文件。
- 然后逐行写入
shuju
中的信息,以及消费金额、初始资金和剩余资金等信息。 - 捕获可能出现的文件不存在和其他异常,并输出对应的错误信息。
- 最后无论如何都会输出“写入成功”和“写入结束”的信息。
class xieru:
def __init__(self,year,month,day,weather,shuju,xiaofei,mony):
self.cidian={"Date:":year+"-"+month+"-"+day,"weather:":weather}
self.mzi=self.cidian["Date:"]
self.shuju=shuju
self.xiaofei=xiaofei
self.mony=mony
self.shengy=float(self.mony)-float(self.xiaofei)
self.shengyu=float(self.shengy)
self.file=os.path.join(chuangjian,self.mzi)
def wen(self):
try:
with open(f"{self.file}.txt","w") as fill:
fill.write(self.cidian["Date:"]+"------"+self.cidian["weather:"])
with open(f"{self.file}.txt","a") as fi:
for i in self.shuju:
fi.write(f"\n{i}\n")
fi.write(f"\n一共花费:{self.xiaofei}元\n")
fi.write(f"\n今天活动资金:{self.mony}元\n")
fi.write(f"\n剩余活动资金:{self.shengyu}元\n")
except FileNotFoundError as e:
print(f"文件不存在:{e}\n")
except Exception as e:
print(e+"\n")
else:
print("写入成功\n")
finally:
print("写入结束\n")
caozuo:
这段代码定义了一个名为caozuo
的类,其中包括以下方法:
-
__init__(self)
: 初始化方法,创建一个空列表self.yuansu
来存储元素。 -
jilu(self)
: 这个方法允许用户输入今日的花销,格式为“物品:价格”。输入的元素会添加到self.yuansu
列表中,直到用户输入'done'为止。最后,返回记录的元素列表。
总体来说,这段代码实现了一个记录花销的功能,用户可以逐个输入花销信息,直到输入'done'结束,最后返回记录的花销信息列表。
class caozuo:
def __init__(self):
self.yuansu=[]
def jilu(self):
elements = self.yuansu
while True:
element = input("请输入今日花销(物品:价格):")
if element == 'done':
break
elements.append(element)
return elements
duqu:
这段代码定义了一个名为duqu
的类,其中包含了一个初始化方法__init__
和一个名为wen
的方法。
在初始化方法中,传入参数year
、month
和day
用于构建一个字典self.cidian
,键为"Date:"
,值为年月日格式的日期字符串。然后通过os.path.join
方法将路径chuangjian
与日期字符串拼接,赋值给self.file
属性。
在wen
方法中,尝试以只读模式打开以日期字符串命名的txt文件。如果文件不存在,会捕获FileNotFoundError
异常并打印一条包含具体异常信息的消息。
class duqu:
def __init__(self,year,month,day):
self.cidian={"Date:":year+"-"+month+"-"+day}
self.mzi=self.cidian["Date:"]
self.file=os.path.join(chuangjian,self.mzi)
def wen(self):
try:
with open(f"{self.file}.txt","r") as file:
return file.read()
except FileNotFoundError as e:
print(f"文件不存在:{e}\n")
以下为完整代码:
import os
import requests
import json
class wenxin():
def __init__(self, api_key, secret_key):
self.API_KEY = api_key
self.SECRET_KEY = secret_key
self.ACCESS_TOKEN = self.access_token()
def access_token(self):
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": self.API_KEY,
"client_secret": self.SECRET_KEY
}
TOKEN = requests.post(url, params=params).json()
return str(TOKEN.get("access_token"))
def hui(self, text):
url = ("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token="+ self.ACCESS_TOKEN)
payload = json.dumps({"messages": [{"role": "user", "content": text}]})
headers = {"Content-Type": "application/json"}
response = requests.request("POST", url, headers=headers, data=payload).json()
return response["result"]
class shanchu:
def __init__(self,year,month,day):
self.cidian={"Date:":year+"-"+month+"-"+day}
self.mzi=self.cidian["Date:"]
self.file=os.path.join(chuangjian,self.mzi)
def wen(self):
try:
os.remove(f"{self.file}.txt")
except FileNotFoundError as e:
print(f"文件不存在:{e}\n")
class mulu:
def __int__(self):
self.wenj=chuangjian
def duqu(self):
if os.path.exists(chuangjian) and os.path.isdir(chuangjian):
for i in os.listdir(chuangjian):
print(i)
class xieru:
def __init__(self,year,month,day,weather,shuju,xiaofei,mony):
self.cidian={"Date:":year+"-"+month+"-"+day,"weather:":weather}
self.mzi=self.cidian["Date:"]
self.shuju=shuju
self.xiaofei=xiaofei
self.mony=mony
self.shengy=float(self.mony)-float(self.xiaofei)
self.shengyu=float(self.shengy)
self.file=os.path.join(chuangjian,self.mzi)
def wen(self):
try:
with open(f"{self.file}.txt","w") as fill:
fill.write(self.cidian["Date:"]+"------"+self.cidian["weather:"])
with open(f"{self.file}.txt","a") as fi:
for i in self.shuju:
fi.write(f"\n{i}\n")
fi.write(f"\n一共花费:{self.xiaofei}元\n")
fi.write(f"\n今天活动资金:{self.mony}元\n")
fi.write(f"\n剩余活动资金:{self.shengyu}元\n")
except FileNotFoundError as e:
print(f"文件不存在:{e}\n")
except Exception as e:
print(e+"\n")
else:
print("写入成功\n")
finally:
print("写入结束\n")
class caozuo:
def __init__(self):
self.yuansu=[]
def jilu(self):
elements = self.yuansu
while True:
element = input("请输入今日花销(物品:价格):")
if element == 'done':
break
elements.append(element)
return elements
class duqu:
def __init__(self,year,month,day):
self.cidian={"Date:":year+"-"+month+"-"+day}
self.mzi=self.cidian["Date:"]
self.file=os.path.join(chuangjian,self.mzi)
def wen(self):
try:
with open(f"{self.file}.txt","r") as file:
return file.read()
except FileNotFoundError as e:
print(f"文件不存在:{e}\n")
if __name__ == "__main__":
dangqin=os.getcwd()
print(dangqin)
mz="日记2"
dian={"wenjianjia:":dangqin+"\\"+mz+"\\"}
chuangjian= dian["wenjianjia:"]
try:
os.makedirs(chuangjian,exist_ok=True)
except FileExistsError as e:
print(f"文件夹已存在:{e}\n")
print("欢迎使用记账本")
print("1.写入记账")
print("2.读取记账")
print("3.删除记账")
print("4.优化账单")
print("5.退出")
while True:
try:
a=int(input("请输入你的选择:"))
if a==1:
year=input("请输入年份:")
month=input("请输入月份:")
day=input("请输入日期:")
weather=input("请输入天气:")
mony=input("请输入今日活动资金:")
n=caozuo()
c=n.jilu()
def jisuan(c):
a=0
for i in c:
chuli=i.split(":")
a+=float(chuli[1])
return a
xiaofei=jisuan(c)
shuju=c
x=xieru(year,month,day,weather,shuju,xiaofei,mony)
x.wen()
if a==2:
print("__________")
print("目录:\n")
mulu().duqu()
print("__________")
year=input("请输入年份:")
month=input("请输入月份:")
day=input("请输入日期:")
x=duqu(year,month,day)
print(x.wen())
if a==3:
print("__________")
print("目录:\n")
mulu().duqu()
print("__________")
year=input("请输入年份:")
month=input("请输入月份:")
day=input("请输入日期:")
x=shanchu(year,month,day)
x.wen()
if a==4:
promate=(
"背景:你是一个专业的财务专家\n"
"任务:现在给你一个账单,请你优化账单,让账单更准确,更真实,让账单更符合你的生活,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实,让账单更真实"
"备注:只输出优化后的账单,不要输出其他内容"
)
print("__________")
print("目录:\n")
mulu().duqu()
print("__________")
year=input("请输入年份:")
month=input("请输入月份:")
day=input("请输入日期:")
x=duqu(year,month,day)
x.wen()
key={
"apikey":"API_KEY",
"serkry":"SECRET_KEY"
}
y=wenxin(key["apikey"],key["serkry"])
fen=x.wen().split("\n")
print(str(fen))
print(y.hui(str(fen)+promate))
if a==5:
print("退出成功")
break
except ValueError as e:
print(f"输入错误:{e}\n")
作者:X_UN