xp3-tool 5.0__tar.gz → 5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- xp3_tool-5.1/PKG-INFO +287 -0
- xp3_tool-5.1/README.md +265 -0
- {xp3_tool-5.0 → xp3_tool-5.1}/setup.py +1 -1
- {xp3_tool-5.0 → xp3_tool-5.1}/xp3_tool/__init__.py +1 -1
- {xp3_tool-5.0 → xp3_tool-5.1}/xp3_tool/xp3_tool.py +8 -1
- xp3_tool-5.1/xp3_tool.egg-info/PKG-INFO +287 -0
- xp3_tool-5.0/PKG-INFO +0 -213
- xp3_tool-5.0/README.md +0 -191
- xp3_tool-5.0/xp3_tool.egg-info/PKG-INFO +0 -213
- {xp3_tool-5.0 → xp3_tool-5.1}/setup.cfg +0 -0
- {xp3_tool-5.0 → xp3_tool-5.1}/xp3_tool.egg-info/SOURCES.txt +0 -0
- {xp3_tool-5.0 → xp3_tool-5.1}/xp3_tool.egg-info/dependency_links.txt +0 -0
- {xp3_tool-5.0 → xp3_tool-5.1}/xp3_tool.egg-info/requires.txt +0 -0
- {xp3_tool-5.0 → xp3_tool-5.1}/xp3_tool.egg-info/top_level.txt +0 -0
xp3_tool-5.1/PKG-INFO
ADDED
@@ -0,0 +1,287 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: xp3_tool
|
3
|
+
Version: 5.1
|
4
|
+
Summary: xp_t3_tool
|
5
|
+
Home-page:
|
6
|
+
Author: XuPeng
|
7
|
+
Author-email: xupeng23456@126.com
|
8
|
+
License: MIT
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
10
|
+
Classifier: Programming Language :: Python
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
12
|
+
Classifier: Programming Language :: Python :: 3.6
|
13
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
14
|
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
15
|
+
Requires-Python: >=3.10.0
|
16
|
+
Description-Content-Type: text/markdown
|
17
|
+
Requires-Dist: openai
|
18
|
+
Requires-Dist: pandas
|
19
|
+
Requires-Dist: oss2
|
20
|
+
Requires-Dist: python-dotenv
|
21
|
+
|
22
|
+
|
23
|
+
# Excel 与 OSS 处理工具库
|
24
|
+
|
25
|
+
这是一个集成了 OpenAI API 调用、阿里云 OSS 文件管理和 Excel 数据处理功能的 Python 工具库。
|
26
|
+
|
27
|
+
## 功能特性
|
28
|
+
|
29
|
+
### 🤖 AI 对话功能 (CallAi 类)
|
30
|
+
- 支持 OpenAI 兼容的 API 调用
|
31
|
+
- 可自定义系统提示词和模型参数
|
32
|
+
- 灵活的对话配置(temperature、top_p)
|
33
|
+
|
34
|
+
### ☁️ OSS 文件管理 (ExcelOSSHandler 类)
|
35
|
+
- Excel 文件上传到阿里云 OSS
|
36
|
+
- 从 OSS 下载 Excel 文件并转换为 pandas DataFrame
|
37
|
+
- 支持环境变量自动配置
|
38
|
+
- 完整的错误处理和文件验证
|
39
|
+
|
40
|
+
### 📧 数据导出与邮件发送 (ExportToEmail 函数)
|
41
|
+
- 将 DataFrame 导出为 Excel 文件
|
42
|
+
- 自动通过邮件发送 Excel 附件
|
43
|
+
- 支持 HTML 格式的邮件内容
|
44
|
+
- 自动清理临时文件
|
45
|
+
|
46
|
+
## 安装依赖
|
47
|
+
|
48
|
+
```bash
|
49
|
+
pip install openai pandas oss2 python-dotenv openpyxl
|
50
|
+
```
|
51
|
+
|
52
|
+
## 快速开始
|
53
|
+
|
54
|
+
### 1. 环境配置
|
55
|
+
|
56
|
+
创建 `.env` 文件配置敏感信息:
|
57
|
+
|
58
|
+
```env
|
59
|
+
# OpenAI 配置
|
60
|
+
OPENAI_API_KEY=your-openai-api-key
|
61
|
+
OPENAI_BASE_URL=https://api.openai.com/v1
|
62
|
+
|
63
|
+
# 阿里云 OSS 配置
|
64
|
+
access_key_id=your-access-key-id
|
65
|
+
access_key_secret=your-access-key-secret
|
66
|
+
endpoint=oss-cn-hangzhou.aliyuncs.com
|
67
|
+
bucket_name=your-bucket-name
|
68
|
+
|
69
|
+
# 邮件配置
|
70
|
+
email_sender=your-email@163.com
|
71
|
+
email_password=your-email-authorization-code
|
72
|
+
```
|
73
|
+
|
74
|
+
### 2. AI 对话功能
|
75
|
+
|
76
|
+
```python
|
77
|
+
from your_module import CallAi
|
78
|
+
|
79
|
+
# 初始化 AI 客户端
|
80
|
+
ai = CallAi(
|
81
|
+
api_key="your-api-key",
|
82
|
+
base_url="https://api.openai.com/v1",
|
83
|
+
model="qwen-plus" # 默认模型
|
84
|
+
)
|
85
|
+
|
86
|
+
# 设置系统提示词
|
87
|
+
ai.prompt = "你是一个有用的助手"
|
88
|
+
|
89
|
+
# 进行对话
|
90
|
+
response = ai.chat("你好,请介绍一下自己")
|
91
|
+
print(response)
|
92
|
+
```
|
93
|
+
|
94
|
+
### 3. OSS 文件管理(支持环境变量自动加载)
|
95
|
+
|
96
|
+
```python
|
97
|
+
from your_module import ExcelOSSHandler
|
98
|
+
|
99
|
+
# 方式1:使用环境变量自动配置
|
100
|
+
oss_handler = ExcelOSSHandler() # 自动从 .env 文件读取配置
|
101
|
+
|
102
|
+
# 方式2:手动传入配置
|
103
|
+
oss_handler = ExcelOSSHandler(
|
104
|
+
access_key_id="your-access-key-id",
|
105
|
+
access_key_secret="your-access-key-secret",
|
106
|
+
endpoint="https://oss-cn-hangzhou.aliyuncs.com",
|
107
|
+
bucket_name="your-bucket-name"
|
108
|
+
)
|
109
|
+
|
110
|
+
# 上传 Excel 文件到 OSS
|
111
|
+
success = oss_handler.upload_excel_to_oss(
|
112
|
+
local_file_path="local_file.xlsx",
|
113
|
+
oss_file_path="oss/path/file.xlsx"
|
114
|
+
)
|
115
|
+
|
116
|
+
# 从 OSS 下载 Excel 并转换为 DataFrame
|
117
|
+
df = oss_handler.get_excel_from_oss("oss/path/file.xlsx")
|
118
|
+
```
|
119
|
+
|
120
|
+
### 4. 数据导出与邮件发送
|
121
|
+
|
122
|
+
```python
|
123
|
+
from your_module import ExportToEmail
|
124
|
+
import pandas as pd
|
125
|
+
|
126
|
+
# 创建示例数据
|
127
|
+
df = pd.DataFrame({
|
128
|
+
'Name': ['Alice', 'Bob', 'Charlie'],
|
129
|
+
'Age': [25, 30, 35],
|
130
|
+
'City': ['Beijing', 'Shanghai', 'Guangzhou']
|
131
|
+
})
|
132
|
+
|
133
|
+
# 方式1:使用环境变量自动配置邮件
|
134
|
+
result = ExportToEmail(
|
135
|
+
df=df,
|
136
|
+
receiver="recipient@example.com",
|
137
|
+
subject="数据导出报告"
|
138
|
+
)
|
139
|
+
|
140
|
+
# 方式2:手动配置邮件
|
141
|
+
result = ExportToEmail(
|
142
|
+
df=df,
|
143
|
+
receiver="recipient@example.com",
|
144
|
+
subject="数据导出报告",
|
145
|
+
sender="your-email@163.com",
|
146
|
+
password="your-email-password"
|
147
|
+
)
|
148
|
+
|
149
|
+
print(result)
|
150
|
+
```
|
151
|
+
|
152
|
+
## API 参考
|
153
|
+
|
154
|
+
### CallAi 类
|
155
|
+
|
156
|
+
#### 初始化参数
|
157
|
+
- `api_key`: OpenAI API 密钥
|
158
|
+
- `base_url`: API 基础地址
|
159
|
+
- `model`: 模型名称(默认:'qwen-plus')
|
160
|
+
|
161
|
+
#### 属性
|
162
|
+
- `prompt`: 系统提示词(可读写属性)
|
163
|
+
|
164
|
+
#### 方法
|
165
|
+
- `chat(text, top_p=0.9, temperature=0.7)`: 发送对话请求
|
166
|
+
|
167
|
+
### ExcelOSSHandler 类
|
168
|
+
|
169
|
+
#### 初始化参数
|
170
|
+
所有参数都是可选的,如果不提供会自动从环境变量读取:
|
171
|
+
- `access_key_id`: 阿里云访问密钥 ID
|
172
|
+
- `access_key_secret`: 阿里云访问密钥 Secret
|
173
|
+
- `endpoint`: OSS 服务端点
|
174
|
+
- `bucket_name`: 存储桶名称
|
175
|
+
|
176
|
+
#### 方法
|
177
|
+
- `upload_excel_to_oss(local_file_path, oss_file_path)`: 上传 Excel 文件到 OSS
|
178
|
+
- `get_excel_from_oss(oss_file_path)`: 从 OSS 下载 Excel 文件并转换为 DataFrame
|
179
|
+
|
180
|
+
### ExportToEmail 函数
|
181
|
+
|
182
|
+
#### 参数
|
183
|
+
- `df`: 要导出的 pandas DataFrame(必需)
|
184
|
+
- `receiver`: 收件人邮箱地址(默认:'xupeng23456@126.com')
|
185
|
+
- `subject`: 邮件主题(可选,自动生成时间戳)
|
186
|
+
- `sender`: 发件人邮箱(可选,从环境变量读取)
|
187
|
+
- `password`: 发件人邮箱密码/授权码(可选,从环境变量读取)
|
188
|
+
|
189
|
+
#### 返回值
|
190
|
+
返回包含操作结果的字典:
|
191
|
+
```python
|
192
|
+
{
|
193
|
+
"status": "success" | "failed",
|
194
|
+
"message": "描述信息",
|
195
|
+
"file_path": "临时文件路径",
|
196
|
+
"email_sent": True | False,
|
197
|
+
"row_count": 数据行数,
|
198
|
+
"timestamp": "时间戳"
|
199
|
+
}
|
200
|
+
```
|
201
|
+
|
202
|
+
### 工具函数
|
203
|
+
- `uuid(length=16)`: 生成随机字符串 ID
|
204
|
+
|
205
|
+
## 使用示例
|
206
|
+
|
207
|
+
### 完整工作流程示例
|
208
|
+
|
209
|
+
```python
|
210
|
+
from your_module import CallAi, ExcelOSSHandler, ExportToEmail
|
211
|
+
import pandas as pd
|
212
|
+
|
213
|
+
# 1. 使用 AI 生成数据建议
|
214
|
+
ai = CallAi(api_key="your-key", base_url="your-url")
|
215
|
+
ai.prompt = "你是一个数据分析专家"
|
216
|
+
analysis = ai.chat("分析销售数据时应该关注哪些指标?")
|
217
|
+
|
218
|
+
# 2. 从 OSS 获取数据
|
219
|
+
oss_handler = ExcelOSSHandler() # 自动使用环境变量
|
220
|
+
df = oss_handler.get_excel_from_oss("sales/data.xlsx")
|
221
|
+
|
222
|
+
# 3. 处理数据
|
223
|
+
processed_df = df.groupby('category').sum()
|
224
|
+
|
225
|
+
# 4. 导出并发送邮件
|
226
|
+
result = ExportToEmail(
|
227
|
+
df=processed_df,
|
228
|
+
receiver="team@company.com",
|
229
|
+
subject="销售数据汇总报告"
|
230
|
+
)
|
231
|
+
|
232
|
+
print(f"操作结果: {result['status']}")
|
233
|
+
print(f"发送状态: {'成功' if result['email_sent'] else '失败'}")
|
234
|
+
```
|
235
|
+
|
236
|
+
## 错误处理
|
237
|
+
|
238
|
+
所有函数都包含完整的异常处理,会返回详细的错误信息:
|
239
|
+
|
240
|
+
```python
|
241
|
+
# 检查操作结果
|
242
|
+
result = oss_handler.upload_excel_to_oss("nonexistent.xlsx", "oss/path/file.xlsx")
|
243
|
+
if not result:
|
244
|
+
print("文件上传失败")
|
245
|
+
|
246
|
+
# 检查邮件发送结果
|
247
|
+
email_result = ExportToEmail(df, "receiver@example.com")
|
248
|
+
if email_result["status"] == "failed":
|
249
|
+
print(f"发送失败: {email_result['message']}")
|
250
|
+
```
|
251
|
+
|
252
|
+
## 注意事项
|
253
|
+
|
254
|
+
1. **文件格式**: 仅支持 `.xlsx` 和 `.xls` 格式的 Excel 文件
|
255
|
+
2. **邮件服务**: 默认使用 163 邮箱的 SMTP 服务(端口 465,SSL)
|
256
|
+
3. **临时文件**: 自动创建 `./temp` 目录存放临时文件,邮件发送成功后自动清理
|
257
|
+
4. **环境变量**: 建议使用 `.env` 文件管理敏感信息,不要将密钥硬编码在代码中
|
258
|
+
|
259
|
+
## 故障排除
|
260
|
+
|
261
|
+
### 常见问题
|
262
|
+
|
263
|
+
**OSS 连接问题**:
|
264
|
+
- 检查 Access Key 和 Secret 是否正确
|
265
|
+
- 确认 endpoint 格式正确(包含 http/https)
|
266
|
+
- 验证 bucket 名称和权限
|
267
|
+
|
268
|
+
**邮件发送失败**:
|
269
|
+
- 确认邮箱密码是授权码而非登录密码
|
270
|
+
- 检查发件人邮箱是否开启 SMTP 服务
|
271
|
+
- 验证网络连接和防火墙设置
|
272
|
+
|
273
|
+
**Excel 文件处理错误**:
|
274
|
+
- 确认文件没有被其他程序占用
|
275
|
+
- 检查 pandas 和 openpyxl 版本兼容性
|
276
|
+
- 验证文件内容格式正确
|
277
|
+
|
278
|
+
## 更新日志
|
279
|
+
|
280
|
+
### v1.1.0
|
281
|
+
- 新增环境变量自动加载功能
|
282
|
+
- 改进错误处理和日志输出
|
283
|
+
- 优化邮件发送逻辑
|
284
|
+
|
285
|
+
## 许可证
|
286
|
+
|
287
|
+
MIT License
|
xp3_tool-5.1/README.md
ADDED
@@ -0,0 +1,265 @@
|
|
1
|
+
# Excel 与 OSS 处理工具库
|
2
|
+
|
3
|
+
这是一个集成了 OpenAI API 调用、阿里云 OSS 文件管理和 Excel 数据处理功能的 Python 工具库。
|
4
|
+
|
5
|
+
## 功能特性
|
6
|
+
|
7
|
+
### 🤖 AI 对话功能 (CallAi 类)
|
8
|
+
- 支持 OpenAI 兼容的 API 调用
|
9
|
+
- 可自定义系统提示词和模型参数
|
10
|
+
- 灵活的对话配置(temperature、top_p)
|
11
|
+
|
12
|
+
### ☁️ OSS 文件管理 (ExcelOSSHandler 类)
|
13
|
+
- Excel 文件上传到阿里云 OSS
|
14
|
+
- 从 OSS 下载 Excel 文件并转换为 pandas DataFrame
|
15
|
+
- 支持环境变量自动配置
|
16
|
+
- 完整的错误处理和文件验证
|
17
|
+
|
18
|
+
### 📧 数据导出与邮件发送 (ExportToEmail 函数)
|
19
|
+
- 将 DataFrame 导出为 Excel 文件
|
20
|
+
- 自动通过邮件发送 Excel 附件
|
21
|
+
- 支持 HTML 格式的邮件内容
|
22
|
+
- 自动清理临时文件
|
23
|
+
|
24
|
+
## 安装依赖
|
25
|
+
|
26
|
+
```bash
|
27
|
+
pip install openai pandas oss2 python-dotenv openpyxl
|
28
|
+
```
|
29
|
+
|
30
|
+
## 快速开始
|
31
|
+
|
32
|
+
### 1. 环境配置
|
33
|
+
|
34
|
+
创建 `.env` 文件配置敏感信息:
|
35
|
+
|
36
|
+
```env
|
37
|
+
# OpenAI 配置
|
38
|
+
OPENAI_API_KEY=your-openai-api-key
|
39
|
+
OPENAI_BASE_URL=https://api.openai.com/v1
|
40
|
+
|
41
|
+
# 阿里云 OSS 配置
|
42
|
+
access_key_id=your-access-key-id
|
43
|
+
access_key_secret=your-access-key-secret
|
44
|
+
endpoint=oss-cn-hangzhou.aliyuncs.com
|
45
|
+
bucket_name=your-bucket-name
|
46
|
+
|
47
|
+
# 邮件配置
|
48
|
+
email_sender=your-email@163.com
|
49
|
+
email_password=your-email-authorization-code
|
50
|
+
```
|
51
|
+
|
52
|
+
### 2. AI 对话功能
|
53
|
+
|
54
|
+
```python
|
55
|
+
from your_module import CallAi
|
56
|
+
|
57
|
+
# 初始化 AI 客户端
|
58
|
+
ai = CallAi(
|
59
|
+
api_key="your-api-key",
|
60
|
+
base_url="https://api.openai.com/v1",
|
61
|
+
model="qwen-plus" # 默认模型
|
62
|
+
)
|
63
|
+
|
64
|
+
# 设置系统提示词
|
65
|
+
ai.prompt = "你是一个有用的助手"
|
66
|
+
|
67
|
+
# 进行对话
|
68
|
+
response = ai.chat("你好,请介绍一下自己")
|
69
|
+
print(response)
|
70
|
+
```
|
71
|
+
|
72
|
+
### 3. OSS 文件管理(支持环境变量自动加载)
|
73
|
+
|
74
|
+
```python
|
75
|
+
from your_module import ExcelOSSHandler
|
76
|
+
|
77
|
+
# 方式1:使用环境变量自动配置
|
78
|
+
oss_handler = ExcelOSSHandler() # 自动从 .env 文件读取配置
|
79
|
+
|
80
|
+
# 方式2:手动传入配置
|
81
|
+
oss_handler = ExcelOSSHandler(
|
82
|
+
access_key_id="your-access-key-id",
|
83
|
+
access_key_secret="your-access-key-secret",
|
84
|
+
endpoint="https://oss-cn-hangzhou.aliyuncs.com",
|
85
|
+
bucket_name="your-bucket-name"
|
86
|
+
)
|
87
|
+
|
88
|
+
# 上传 Excel 文件到 OSS
|
89
|
+
success = oss_handler.upload_excel_to_oss(
|
90
|
+
local_file_path="local_file.xlsx",
|
91
|
+
oss_file_path="oss/path/file.xlsx"
|
92
|
+
)
|
93
|
+
|
94
|
+
# 从 OSS 下载 Excel 并转换为 DataFrame
|
95
|
+
df = oss_handler.get_excel_from_oss("oss/path/file.xlsx")
|
96
|
+
```
|
97
|
+
|
98
|
+
### 4. 数据导出与邮件发送
|
99
|
+
|
100
|
+
```python
|
101
|
+
from your_module import ExportToEmail
|
102
|
+
import pandas as pd
|
103
|
+
|
104
|
+
# 创建示例数据
|
105
|
+
df = pd.DataFrame({
|
106
|
+
'Name': ['Alice', 'Bob', 'Charlie'],
|
107
|
+
'Age': [25, 30, 35],
|
108
|
+
'City': ['Beijing', 'Shanghai', 'Guangzhou']
|
109
|
+
})
|
110
|
+
|
111
|
+
# 方式1:使用环境变量自动配置邮件
|
112
|
+
result = ExportToEmail(
|
113
|
+
df=df,
|
114
|
+
receiver="recipient@example.com",
|
115
|
+
subject="数据导出报告"
|
116
|
+
)
|
117
|
+
|
118
|
+
# 方式2:手动配置邮件
|
119
|
+
result = ExportToEmail(
|
120
|
+
df=df,
|
121
|
+
receiver="recipient@example.com",
|
122
|
+
subject="数据导出报告",
|
123
|
+
sender="your-email@163.com",
|
124
|
+
password="your-email-password"
|
125
|
+
)
|
126
|
+
|
127
|
+
print(result)
|
128
|
+
```
|
129
|
+
|
130
|
+
## API 参考
|
131
|
+
|
132
|
+
### CallAi 类
|
133
|
+
|
134
|
+
#### 初始化参数
|
135
|
+
- `api_key`: OpenAI API 密钥
|
136
|
+
- `base_url`: API 基础地址
|
137
|
+
- `model`: 模型名称(默认:'qwen-plus')
|
138
|
+
|
139
|
+
#### 属性
|
140
|
+
- `prompt`: 系统提示词(可读写属性)
|
141
|
+
|
142
|
+
#### 方法
|
143
|
+
- `chat(text, top_p=0.9, temperature=0.7)`: 发送对话请求
|
144
|
+
|
145
|
+
### ExcelOSSHandler 类
|
146
|
+
|
147
|
+
#### 初始化参数
|
148
|
+
所有参数都是可选的,如果不提供会自动从环境变量读取:
|
149
|
+
- `access_key_id`: 阿里云访问密钥 ID
|
150
|
+
- `access_key_secret`: 阿里云访问密钥 Secret
|
151
|
+
- `endpoint`: OSS 服务端点
|
152
|
+
- `bucket_name`: 存储桶名称
|
153
|
+
|
154
|
+
#### 方法
|
155
|
+
- `upload_excel_to_oss(local_file_path, oss_file_path)`: 上传 Excel 文件到 OSS
|
156
|
+
- `get_excel_from_oss(oss_file_path)`: 从 OSS 下载 Excel 文件并转换为 DataFrame
|
157
|
+
|
158
|
+
### ExportToEmail 函数
|
159
|
+
|
160
|
+
#### 参数
|
161
|
+
- `df`: 要导出的 pandas DataFrame(必需)
|
162
|
+
- `receiver`: 收件人邮箱地址(默认:'xupeng23456@126.com')
|
163
|
+
- `subject`: 邮件主题(可选,自动生成时间戳)
|
164
|
+
- `sender`: 发件人邮箱(可选,从环境变量读取)
|
165
|
+
- `password`: 发件人邮箱密码/授权码(可选,从环境变量读取)
|
166
|
+
|
167
|
+
#### 返回值
|
168
|
+
返回包含操作结果的字典:
|
169
|
+
```python
|
170
|
+
{
|
171
|
+
"status": "success" | "failed",
|
172
|
+
"message": "描述信息",
|
173
|
+
"file_path": "临时文件路径",
|
174
|
+
"email_sent": True | False,
|
175
|
+
"row_count": 数据行数,
|
176
|
+
"timestamp": "时间戳"
|
177
|
+
}
|
178
|
+
```
|
179
|
+
|
180
|
+
### 工具函数
|
181
|
+
- `uuid(length=16)`: 生成随机字符串 ID
|
182
|
+
|
183
|
+
## 使用示例
|
184
|
+
|
185
|
+
### 完整工作流程示例
|
186
|
+
|
187
|
+
```python
|
188
|
+
from your_module import CallAi, ExcelOSSHandler, ExportToEmail
|
189
|
+
import pandas as pd
|
190
|
+
|
191
|
+
# 1. 使用 AI 生成数据建议
|
192
|
+
ai = CallAi(api_key="your-key", base_url="your-url")
|
193
|
+
ai.prompt = "你是一个数据分析专家"
|
194
|
+
analysis = ai.chat("分析销售数据时应该关注哪些指标?")
|
195
|
+
|
196
|
+
# 2. 从 OSS 获取数据
|
197
|
+
oss_handler = ExcelOSSHandler() # 自动使用环境变量
|
198
|
+
df = oss_handler.get_excel_from_oss("sales/data.xlsx")
|
199
|
+
|
200
|
+
# 3. 处理数据
|
201
|
+
processed_df = df.groupby('category').sum()
|
202
|
+
|
203
|
+
# 4. 导出并发送邮件
|
204
|
+
result = ExportToEmail(
|
205
|
+
df=processed_df,
|
206
|
+
receiver="team@company.com",
|
207
|
+
subject="销售数据汇总报告"
|
208
|
+
)
|
209
|
+
|
210
|
+
print(f"操作结果: {result['status']}")
|
211
|
+
print(f"发送状态: {'成功' if result['email_sent'] else '失败'}")
|
212
|
+
```
|
213
|
+
|
214
|
+
## 错误处理
|
215
|
+
|
216
|
+
所有函数都包含完整的异常处理,会返回详细的错误信息:
|
217
|
+
|
218
|
+
```python
|
219
|
+
# 检查操作结果
|
220
|
+
result = oss_handler.upload_excel_to_oss("nonexistent.xlsx", "oss/path/file.xlsx")
|
221
|
+
if not result:
|
222
|
+
print("文件上传失败")
|
223
|
+
|
224
|
+
# 检查邮件发送结果
|
225
|
+
email_result = ExportToEmail(df, "receiver@example.com")
|
226
|
+
if email_result["status"] == "failed":
|
227
|
+
print(f"发送失败: {email_result['message']}")
|
228
|
+
```
|
229
|
+
|
230
|
+
## 注意事项
|
231
|
+
|
232
|
+
1. **文件格式**: 仅支持 `.xlsx` 和 `.xls` 格式的 Excel 文件
|
233
|
+
2. **邮件服务**: 默认使用 163 邮箱的 SMTP 服务(端口 465,SSL)
|
234
|
+
3. **临时文件**: 自动创建 `./temp` 目录存放临时文件,邮件发送成功后自动清理
|
235
|
+
4. **环境变量**: 建议使用 `.env` 文件管理敏感信息,不要将密钥硬编码在代码中
|
236
|
+
|
237
|
+
## 故障排除
|
238
|
+
|
239
|
+
### 常见问题
|
240
|
+
|
241
|
+
**OSS 连接问题**:
|
242
|
+
- 检查 Access Key 和 Secret 是否正确
|
243
|
+
- 确认 endpoint 格式正确(包含 http/https)
|
244
|
+
- 验证 bucket 名称和权限
|
245
|
+
|
246
|
+
**邮件发送失败**:
|
247
|
+
- 确认邮箱密码是授权码而非登录密码
|
248
|
+
- 检查发件人邮箱是否开启 SMTP 服务
|
249
|
+
- 验证网络连接和防火墙设置
|
250
|
+
|
251
|
+
**Excel 文件处理错误**:
|
252
|
+
- 确认文件没有被其他程序占用
|
253
|
+
- 检查 pandas 和 openpyxl 版本兼容性
|
254
|
+
- 验证文件内容格式正确
|
255
|
+
|
256
|
+
## 更新日志
|
257
|
+
|
258
|
+
### v1.1.0
|
259
|
+
- 新增环境变量自动加载功能
|
260
|
+
- 改进错误处理和日志输出
|
261
|
+
- 优化邮件发送逻辑
|
262
|
+
|
263
|
+
## 许可证
|
264
|
+
|
265
|
+
MIT License
|
@@ -59,7 +59,7 @@ class CallAi:
|
|
59
59
|
class ExcelOSSHandler:
|
60
60
|
"""处理Excel文件与阿里云OSS的交互,并提供转换为pandas DataFrame的功能"""
|
61
61
|
|
62
|
-
def __init__(self, access_key_id: str, access_key_secret: str, endpoint: str, bucket_name: str):
|
62
|
+
def __init__(self, access_key_id: str = None, access_key_secret: str = None, endpoint: str = None, bucket_name: str = None):
|
63
63
|
"""
|
64
64
|
初始化OSS连接
|
65
65
|
|
@@ -69,6 +69,13 @@ class ExcelOSSHandler:
|
|
69
69
|
:param bucket_name: OSS存储桶名称
|
70
70
|
"""
|
71
71
|
# 初始化OSS认证
|
72
|
+
if not access_key_id:
|
73
|
+
load_dotenv()
|
74
|
+
access_key_id = os.getenv("ACCESS_KEY_ID")
|
75
|
+
access_key_secret = os.getenv("ACCESS_KEY_SECRET")
|
76
|
+
endpoint = os.getenv("ENDPOINT")
|
77
|
+
bucket_name = os.getenv("BUCKET_NAME")
|
78
|
+
|
72
79
|
self.auth = oss2.Auth(access_key_id, access_key_secret)
|
73
80
|
# 获取存储桶对象
|
74
81
|
self.bucket = oss2.Bucket(self.auth, endpoint, bucket_name)
|