大家好,我是皮皮。
这个事情还得从前几天在Python白银群【大侠】问了一个Python
自动化办公处理的问题,需求倒是不难,但是他要求ChatGPT帮他处理出来,并且要达到他预期的效果。前期ChatGPT办事不利,被【大侠】一顿狂喷。
言归正传,一起来看看他的需求吧。想要ChatGPT正确干活,必要要把他调教好,不然他就疯言疯语了。
我有文件名为rq_lst,其中存有记录一些日期的一个list ,日期是从小到大排列,但不连续;同一文件夹下,存有文件名以rq_lst中日期开头的一些xlsx数据文件,xlsx数据文件结构相同,其中第一列表头为“股票代码”。我想用python编程,任给rq_lst中一个日期rq_0,统计十日(该日及表中所含前九日)内“股票代码”重复出现的次数。
这个需求,正常人理解起来可能都有点费劲,更何况ChatGPT了。
下图是他的原始文件,文件名,只是以日期开头,但还有其它字符,这就需要继续给它提供补充信息了。
后来【栖迟-3768】使用ChatGPT3.5得到了一个答案,代码如下:
import os
import pandas as pd
# 获取文件夹中的所有文件
file_list = os.listdir("rq_lst")
# 读取rq_lst文件
with open("rq_lst/rq_lst.txt", "r") as file:
dates = file.readlines()
dates = [date.strip() for date in dates]
# 任给的日期
rq_0 = "2023年03月14日" # 替换为你想要的日期
# 确定需要统计的日期范围
rq_index = dates.index(rq_0)
start_index = max(0, rq_index - 9)
dates_to_process = dates[start_index:rq_index+1]
# 统计股票代码重复出现次数的字典
stock_counts = {}
# 遍历日期范围内的文件
for date in dates_to_process:
file_prefix = date.replace("年", "").replace("月", "").replace("日", "")
file_name = [file for file in file_list if file.startswith(file_prefix)]
if len(file_name) > 0:
file_path = os.path.join("rq_lst", file_name[0])
# 读取xlsx文件中的数据
data = pd.read_excel(file_path)
# 统计股票代码重复出现次数
stock_counts[date] = data['股票代码'].duplicated().sum()
# 输出结果
for date, count in stock_counts.items():
print(f"日期:{date},重复次数:{count}")
运行之后,比粉丝原来的答案要强一些,但是还是有点小问题,需要继续调教。
后来【论草莓如何成为冻干莓】给了一个答案,下面是他调教ChatGPT的过程:
这么问就更加清晰了,ChatGPT也知道你要干啥了,并且给出了如下代码:
import os
import pandas as pd
# 获取当前文件夹中符合命名规则的文件
files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.xlsx')]
# 解析文件名中的日期,并找到最小的日期作为起始日期
dates = [pd.to_datetime(f.split('.')[0], format='%Y年%m月%d日') for f in files]
start_date = min(dates).date()
# 存储股票代码和对应的重复次数
stock_code_counts = {}
# 确定前十日日期范围
date_range = pd.date_range(end=start_date, periods=10)
# 遍历日期范围
for date in date_range:
# 根据日期构造文件名
filename = date.strftime('%Y年%m月%d日.xlsx')
# 检查文件是否存在
if filename in files:
# 读取Excel文件
df = pd.read_excel(filename)
# 提取股票代码列
stock_codes = df.iloc[:, 0]
# 统计重复次数
code_counts = stock_codes.value_counts()
# 更新股票代码和重复次数的字典
for code, count in code_counts.items():
stock_code_counts[code] = stock_code_counts.get(code, 0) + count
# 输出结果
for code, count in stock_code_counts.items():
print(f'股票代码 {code} 出现的重复次数:{count}')
把文件名称补齐为粉丝自己的文件夹中的名字,应该是可行的。
后面他还提供了另外一个处理方法,程序更加的健壮了,下一篇文章分享给大家。
大家好,我是皮皮。这篇文章主要盘点了一个Python
自动化办公处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【大侠】提问,感谢【栖迟-3768】、【论草莓如何成为冻干莓】、【瑜亮老师】给出的思路和代码解析,感谢【Ineverleft】等人参与学习交流。