funcguard 0.2.39__tar.gz → 0.2.41__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.
Files changed (34) hide show
  1. {funcguard-0.2.39 → funcguard-0.2.41}/PKG-INFO +24 -12
  2. {funcguard-0.2.39 → funcguard-0.2.41}/README.md +23 -11
  3. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/__init__.py +4 -0
  4. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/__init__.py +19 -2
  5. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/statistics/__init__.py +3 -0
  6. funcguard-0.2.41/funcguard/pd_utils/statistics/agg_utils.py +83 -0
  7. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/statistics/df_statistics.py +49 -0
  8. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/tools.py +4 -1
  9. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard.egg-info/PKG-INFO +24 -12
  10. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard.egg-info/SOURCES.txt +1 -0
  11. {funcguard-0.2.39 → funcguard-0.2.41}/setup.py +1 -1
  12. {funcguard-0.2.39 → funcguard-0.2.41}/LICENSE +0 -0
  13. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/calculate.py +0 -0
  14. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/core.py +0 -0
  15. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/data_models/__init__.py +0 -0
  16. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/data_models/request_models.py +0 -0
  17. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/ip_utils.py +0 -0
  18. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/log_utils.py +0 -0
  19. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/convert_utils.py +0 -0
  20. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/date_utils.py +0 -0
  21. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/fill_round.py +0 -0
  22. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/filter.py +0 -0
  23. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/json_utils/__init__.py +0 -0
  24. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/json_utils/json_parser.py +0 -0
  25. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/statistics/count_utils.py +0 -0
  26. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/pd_utils/statistics/mask_utils.py +0 -0
  27. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/printer.py +0 -0
  28. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard/time_utils.py +0 -0
  29. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard.egg-info/dependency_links.txt +0 -0
  30. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard.egg-info/not-zip-safe +0 -0
  31. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard.egg-info/requires.txt +0 -0
  32. {funcguard-0.2.39 → funcguard-0.2.41}/funcguard.egg-info/top_level.txt +0 -0
  33. {funcguard-0.2.39 → funcguard-0.2.41}/setup.cfg +0 -0
  34. {funcguard-0.2.39 → funcguard-0.2.41}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: funcguard
3
- Version: 0.2.39
3
+ Version: 0.2.41
4
4
  Summary: FuncGuard是一个Python库,提供函数执行超时控制、重试机制、HTTP请求封装和格式化打印工具。
5
5
  Home-page: https://github.com/tinycen/funcguard
6
6
  Author: tinycen
@@ -32,16 +32,16 @@ FuncGuard是一个Python库,提供了函数执行超时控制和重试机制
32
32
 
33
33
  ## 功能特点
34
34
 
35
- | 分类 | 功能描述 |
36
- |------|----------|
37
- | **核心功能** | 函数执行超时控制、函数执行失败自动重试 |
38
- | **网络请求** | HTTP请求封装(支持自动重试)、MD5哈希、Basic Auth编码 |
39
- | **时间工具** | 时间日志记录、耗时统计、执行时间监控和警告、时间等待(带倒计时) |
40
- | **打印工具** | 格式化分隔线、块打印、标题打印、进度条显示 |
41
- | **IP工具** | 局域网IP检测、公网IP检测、IP格式验证 |
42
- | **pandas工具** | 数据填充、类型转换、JSON解析、数据筛选、统计分析 |
43
- | **计算工具** | 数值差异格式化(如+5、-3等) |
44
- | **日志工具** | 彩色日志输出、logger配置 |
35
+ | 分类 | 功能描述 | 文档 |
36
+ |------|----------|------|
37
+ | **核心功能** | 函数执行超时控制、函数执行失败自动重试 | - |
38
+ | **网络请求** | HTTP请求封装(支持自动重试)、MD5哈希、Basic Auth编码 | [查看](./docs/network.md) |
39
+ | **时间工具** | 时间日志记录、耗时统计、执行时间监控和警告、时间等待(带倒计时) | [查看](./docs/time_utils.md) |
40
+ | **打印工具** | 格式化分隔线、块打印、标题打印、进度条显示 | - |
41
+ | **IP工具** | 局域网IP检测、公网IP检测、IP格式验证 | - |
42
+ | **pandas工具** | 数据填充、类型转换、JSON解析、数据筛选、统计分析 | [查看](./docs/pd_utils.md) |
43
+ | **计算工具** | 数值差异格式化(如+5、-3等) | - |
44
+ | **日志工具** | 彩色日志输出、logger配置 | - |
45
45
 
46
46
  ## 安装/升级
47
47
 
@@ -124,6 +124,16 @@ response = send_request(
124
124
  timeout=30
125
125
  )
126
126
  print(response)
127
+
128
+ # 流式传输请求(用于大文件下载)
129
+ response = send_request(
130
+ method="GET",
131
+ url="https://api.example.com/largefile",
132
+ stream=True # 启用流式传输,通过 iter_content() 分块读取
133
+ )
134
+ for chunk in response.iter_content(chunk_size=8192):
135
+ # 处理数据块
136
+ pass
127
137
  ```
128
138
 
129
139
  #### 自动重试
@@ -534,7 +544,9 @@ print(f"当前价格: {current_price}, 变化: {price_change}") # 输出: 当
534
544
  | `pd_fill_na` / `pd_fill_nat` | 数据填充 | [查看](docs/pandas/fill.md) |
535
545
  | `pd_convert_columns` / `pd_convert_decimal` / `pd_convert_numeric_series` / `pd_convert_str_datetime` / `pd_convert_datetime_str` | 类型转换 | [查看](docs/pandas/convert.md) |
536
546
  | `pd_load_json` | JSON解析 | [查看](docs/pandas/json.md) |
537
- | `pd_filter` / `pd_count` | 数据筛选 | [查看](docs/pandas/filter.md) |
547
+ | `pd_filter` | 数据筛选 | [查看](docs/pandas/filter.md) |
548
+ | `pd_count` / `pd_value_counts` | 条件计数统计 | [查看](docs/pandas/count.md) |
549
+ | `pd_group_agg` | 分组聚合统计 | [查看](docs/pandas/agg.md) |
538
550
  | `pd_build_mask` / `pd_build_masks` / `pd_combine_masks` | 掩码构建 | [查看](docs/pandas/mask.md) |
539
551
  | `DataFrameStatistics` | 统计分析 | [查看](docs/pandas/statistics.md) |
540
552
  | `pd_cal_date_diff` / `pd_round_columns` | 日期计算和数值舍入 | [查看](docs/pandas/date.md) |
@@ -5,16 +5,16 @@ FuncGuard是一个Python库,提供了函数执行超时控制和重试机制
5
5
 
6
6
  ## 功能特点
7
7
 
8
- | 分类 | 功能描述 |
9
- |------|----------|
10
- | **核心功能** | 函数执行超时控制、函数执行失败自动重试 |
11
- | **网络请求** | HTTP请求封装(支持自动重试)、MD5哈希、Basic Auth编码 |
12
- | **时间工具** | 时间日志记录、耗时统计、执行时间监控和警告、时间等待(带倒计时) |
13
- | **打印工具** | 格式化分隔线、块打印、标题打印、进度条显示 |
14
- | **IP工具** | 局域网IP检测、公网IP检测、IP格式验证 |
15
- | **pandas工具** | 数据填充、类型转换、JSON解析、数据筛选、统计分析 |
16
- | **计算工具** | 数值差异格式化(如+5、-3等) |
17
- | **日志工具** | 彩色日志输出、logger配置 |
8
+ | 分类 | 功能描述 | 文档 |
9
+ |------|----------|------|
10
+ | **核心功能** | 函数执行超时控制、函数执行失败自动重试 | - |
11
+ | **网络请求** | HTTP请求封装(支持自动重试)、MD5哈希、Basic Auth编码 | [查看](./docs/network.md) |
12
+ | **时间工具** | 时间日志记录、耗时统计、执行时间监控和警告、时间等待(带倒计时) | [查看](./docs/time_utils.md) |
13
+ | **打印工具** | 格式化分隔线、块打印、标题打印、进度条显示 | - |
14
+ | **IP工具** | 局域网IP检测、公网IP检测、IP格式验证 | - |
15
+ | **pandas工具** | 数据填充、类型转换、JSON解析、数据筛选、统计分析 | [查看](./docs/pd_utils.md) |
16
+ | **计算工具** | 数值差异格式化(如+5、-3等) | - |
17
+ | **日志工具** | 彩色日志输出、logger配置 | - |
18
18
 
19
19
  ## 安装/升级
20
20
 
@@ -97,6 +97,16 @@ response = send_request(
97
97
  timeout=30
98
98
  )
99
99
  print(response)
100
+
101
+ # 流式传输请求(用于大文件下载)
102
+ response = send_request(
103
+ method="GET",
104
+ url="https://api.example.com/largefile",
105
+ stream=True # 启用流式传输,通过 iter_content() 分块读取
106
+ )
107
+ for chunk in response.iter_content(chunk_size=8192):
108
+ # 处理数据块
109
+ pass
100
110
  ```
101
111
 
102
112
  #### 自动重试
@@ -507,7 +517,9 @@ print(f"当前价格: {current_price}, 变化: {price_change}") # 输出: 当
507
517
  | `pd_fill_na` / `pd_fill_nat` | 数据填充 | [查看](docs/pandas/fill.md) |
508
518
  | `pd_convert_columns` / `pd_convert_decimal` / `pd_convert_numeric_series` / `pd_convert_str_datetime` / `pd_convert_datetime_str` | 类型转换 | [查看](docs/pandas/convert.md) |
509
519
  | `pd_load_json` | JSON解析 | [查看](docs/pandas/json.md) |
510
- | `pd_filter` / `pd_count` | 数据筛选 | [查看](docs/pandas/filter.md) |
520
+ | `pd_filter` | 数据筛选 | [查看](docs/pandas/filter.md) |
521
+ | `pd_count` / `pd_value_counts` | 条件计数统计 | [查看](docs/pandas/count.md) |
522
+ | `pd_group_agg` | 分组聚合统计 | [查看](docs/pandas/agg.md) |
511
523
  | `pd_build_mask` / `pd_build_masks` / `pd_combine_masks` | 掩码构建 | [查看](docs/pandas/mask.md) |
512
524
  | `DataFrameStatistics` | 统计分析 | [查看](docs/pandas/statistics.md) |
513
525
  | `pd_cal_date_diff` / `pd_round_columns` | 日期计算和数值舍入 | [查看](docs/pandas/date.md) |
@@ -30,6 +30,8 @@ from .pd_utils import (
30
30
  pd_build_masks,
31
31
  pd_combine_masks,
32
32
  pd_count,
33
+ pd_value_counts,
34
+ pd_group_agg,
33
35
  DataFrameStatistics,
34
36
 
35
37
  )
@@ -101,6 +103,8 @@ __all__ = [
101
103
  "pd_build_masks",
102
104
  "pd_combine_masks",
103
105
  "pd_count",
106
+ "pd_value_counts",
107
+ "pd_group_agg",
104
108
  "DataFrameStatistics",
105
109
 
106
110
  # 计算工具
@@ -1,8 +1,23 @@
1
1
  import pandas as pd
2
2
  from .fill_round import fill_na, round_columns
3
3
  from .date_utils import fill_nat, cal_date_diff
4
- from .convert_utils import convert_columns, convert_decimal, convert_numeric_series, load_json, convert_str_datetime, convert_datetime_str
5
- from .statistics import pd_build_mask, pd_build_masks, pd_combine_masks, pd_count, DataFrameStatistics
4
+ from .convert_utils import (
5
+ convert_columns,
6
+ convert_decimal,
7
+ convert_numeric_series,
8
+ load_json,
9
+ convert_str_datetime,
10
+ convert_datetime_str
11
+ )
12
+ from .statistics import (
13
+ pd_build_mask,
14
+ pd_build_masks,
15
+ pd_combine_masks,
16
+ pd_count,
17
+ pd_value_counts,
18
+ pd_group_agg,
19
+ DataFrameStatistics
20
+ )
6
21
  from .filter import pd_filter
7
22
 
8
23
  # 启用未来行为:禁止静默降级
@@ -32,5 +47,7 @@ __all__ = [
32
47
  "pd_build_masks",
33
48
  "pd_combine_masks",
34
49
  "pd_count",
50
+ "pd_value_counts",
51
+ "pd_group_agg",
35
52
  "DataFrameStatistics",
36
53
  ]
@@ -5,6 +5,7 @@ from .mask_utils import (
5
5
  build_base_mask as pd_build_masks,
6
6
  combine_masks as pd_combine_masks,
7
7
  )
8
+ from .agg_utils import group_agg as pd_group_agg
8
9
 
9
10
  __all__ = [
10
11
  # 掩码构建函数
@@ -14,6 +15,8 @@ __all__ = [
14
15
  # 统计函数
15
16
  "pd_count",
16
17
  "pd_value_counts",
18
+ # 聚合函数
19
+ "pd_group_agg",
17
20
  # 统计分析类
18
21
  "DataFrameStatistics",
19
22
  ]
@@ -0,0 +1,83 @@
1
+
2
+ """
3
+ 聚合(aggregation)操作工具模块。
4
+
5
+ 提供DataFrame分组聚合统计功能,支持按指定列分组后对另一列进行
6
+ sum、mean、max、min、count、median、std、var等聚合计算。
7
+ """
8
+
9
+ import pandas as pd
10
+ from typing import Any, Dict, Optional, Union, List, Tuple
11
+ from .mask_utils import build_single_mask, build_base_mask
12
+
13
+
14
+ def group_agg(
15
+ df: pd.DataFrame,
16
+ group_col: str,
17
+ agg_col: str,
18
+ agg_func: str = "sum",
19
+ sort: Optional[str] = None,
20
+ conditions: Optional[Union[Tuple, List[Tuple]]] = None,
21
+ logic: str = "and",
22
+ true_mask: Optional[pd.Series] = None,
23
+ false_mask: Optional[pd.Series] = None
24
+ ) -> Dict[Any, Union[int, float]]:
25
+ """
26
+ 按指定列分组,对另一列进行聚合统计。
27
+
28
+ 参数:
29
+ - df (pd.DataFrame):输入的DataFrame。
30
+ - group_col (str):分组列名(如A列)。
31
+ - agg_col (str):聚合列名(如B列)。
32
+ - agg_func (str):聚合函数,支持 "sum"、"mean"、"max"、"min"、"count"、"median"、"std"、"var",
33
+ 默认为 "sum"。
34
+ - sort (Optional[str]):排序方式,"asc" 表示升序,"desc" 表示降序,
35
+ 默认为None表示按分组列的原始顺序。
36
+ - conditions (Optional[Union[Tuple, List[Tuple]]]):可选的过滤条件,
37
+ 格式与count函数相同。如果提供,则只统计符合条件的行。
38
+ - logic (str):逻辑操作类型,"and" 或 "or",默认为 "and"。
39
+ - true_mask (pd.Series):初始True掩码,默认为None。
40
+ - false_mask (pd.Series):初始False掩码,默认为None。
41
+
42
+ 返回:
43
+ - Dict[Any, Union[int, float]]:以分组值为键,聚合结果为值的字典。
44
+
45
+ 示例:
46
+ >>> group_agg(df, "category", "amount", "sum")
47
+ {'A': 1000, 'B': 2000, 'C': 1500}
48
+ >>> group_agg(df, "category", "amount", "mean")
49
+ {'A': 100.0, 'B': 200.0, 'C': 150.0}
50
+ >>> group_agg(df, "category", "amount", "sum", sort="desc")
51
+ {'B': 2000, 'C': 1500, 'A': 1000}
52
+ >>> group_agg(df, "category", "amount", "sum", conditions=[("status", "==", "active")])
53
+ {'A': 800, 'B': 1500}
54
+ """
55
+ # 参数校验
56
+ valid_agg_funcs = ("sum", "mean", "max", "min", "count", "median", "std", "var")
57
+ if agg_func not in valid_agg_funcs:
58
+ raise ValueError(f"agg_func 参数必须是 {valid_agg_funcs} 之一,当前值: {agg_func}")
59
+ if sort is not None and sort not in ("asc", "desc"):
60
+ raise ValueError(f"sort 参数必须是 'asc'、'desc' 或 None,当前值: {sort}")
61
+
62
+ # 如果有过滤条件,先应用条件筛选
63
+ if conditions is not None:
64
+ if isinstance(conditions, tuple):
65
+ mask = build_single_mask(df, conditions)
66
+ else:
67
+ mask = build_base_mask(df, conditions, logic, true_mask, false_mask)
68
+ filtered_df = df[mask]
69
+ else:
70
+ filtered_df = df
71
+
72
+ # 使用pandas的groupby进行聚合
73
+ grouped = filtered_df.groupby(group_col)[agg_col]
74
+ result_series = grouped.agg(agg_func)
75
+
76
+ # 排序处理
77
+ if sort == "asc":
78
+ result_series = result_series.sort_values(ascending=True)
79
+ elif sort == "desc":
80
+ result_series = result_series.sort_values(ascending=False)
81
+
82
+ # 转换为字典返回
83
+ return result_series.to_dict()
@@ -2,6 +2,7 @@ import pandas as pd
2
2
  from typing import Any, Dict, List, Tuple, Union, Optional, Mapping
3
3
  from .mask_utils import build_single_mask as _original_build_single_mask, build_base_mask as _original_build_base_mask, combine_masks
4
4
  from .count_utils import count as _original_count, value_counts as _original_value_counts
5
+ from .agg_utils import group_agg as _original_group_agg
5
6
 
6
7
 
7
8
 
@@ -154,6 +155,54 @@ class DataFrameStatistics:
154
155
  )
155
156
 
156
157
 
158
+ def group_agg(
159
+ self,
160
+ group_col: str,
161
+ agg_col: str,
162
+ agg_func: str = "sum",
163
+ sort: Optional[str] = None,
164
+ conditions: Optional[Union[Tuple, List[Tuple]]] = None,
165
+ logic: str = "and",
166
+ true_mask: Optional[pd.Series] = None,
167
+ false_mask: Optional[pd.Series] = None
168
+ ) -> Dict[Any, Union[int, float]]:
169
+ """
170
+ 按指定列分组,对另一列进行聚合统计,自动使用内部掩码参数
171
+
172
+ 参数:
173
+ - group_col (str):分组列名(如A列)
174
+ - agg_col (str):聚合列名(如B列)
175
+ - agg_func (str):聚合函数,支持 "sum"、"mean"、"max"、"min"、"count"、"median"、"std"、"var",
176
+ 默认为 "sum"
177
+ - sort (Optional[str]):排序方式,"asc" 表示升序,"desc" 表示降序,
178
+ 默认为None表示按分组列的原始顺序
179
+ - conditions (Optional[Union[Tuple, List[Tuple]]]):可选的过滤条件
180
+ - logic (str):逻辑操作类型,"and" 或 "or",默认为 "and"
181
+ - true_mask (pd.Series):初始True掩码,默认为None(使用内部缓存)
182
+ - false_mask (pd.Series):初始False掩码,默认为None(使用内部缓存)
183
+
184
+ 返回:
185
+ - Dict[Any, Union[int, float]]:以分组值为键,聚合结果为值的字典
186
+
187
+ 示例:
188
+ >>> stats.group_agg("category", "amount", "sum")
189
+ {'A': 1000, 'B': 2000, 'C': 1500}
190
+ >>> stats.group_agg("category", "amount", "mean")
191
+ {'A': 100.0, 'B': 200.0, 'C': 150.0}
192
+ >>> stats.group_agg("category", "amount", "sum", sort="desc")
193
+ {'B': 2000, 'C': 1500, 'A': 1000}
194
+ """
195
+ # 如果没有提供外部掩码,使用内部缓存的掩码
196
+ if true_mask is None:
197
+ true_mask = self._true_mask
198
+ if false_mask is None:
199
+ false_mask = self._false_mask
200
+ return _original_group_agg(
201
+ self._df, group_col, agg_col, agg_func, sort,
202
+ conditions, logic, true_mask, false_mask
203
+ )
204
+
205
+
157
206
  def dataframe_info(self) -> Dict[str, Any]:
158
207
  """获取DataFrame的基本信息"""
159
208
  return {
@@ -113,6 +113,7 @@ def send_request(
113
113
  request_log: RequestLog = RequestLog(),
114
114
  curl_fallback: bool = False,
115
115
  curl_fallback_impersonate: str = _DEFAULT_IMPERSONATE,
116
+ stream: bool = False,
116
117
  ) -> Union[Dict, str, requests.Response]:
117
118
  """
118
119
  发送HTTP请求的通用函数
@@ -132,6 +133,8 @@ def send_request(
132
133
  需与对应浏览器 User-Agent 匹配(未自定义 UA 时由内部自动注入)。
133
134
  支持的值见 _IMPERSONATE_UA_MAP。
134
135
  若 send_request 配置了 auto_retry,curl_cffi 兜底会继承同样的重试参数。
136
+ :param stream: 是否使用流式传输,默认 False。启用后响应内容不会立即下载,
137
+ 可通过 iter_content() 分块读取,适合大文件下载场景。
135
138
  :return: 请求结果
136
139
  """
137
140
  payload = None
@@ -149,7 +152,7 @@ def send_request(
149
152
  if headers is None:
150
153
  headers = {}
151
154
 
152
- req_kwargs = {"headers": headers, "timeout": timeout}
155
+ req_kwargs = {"headers": headers, "timeout": timeout, "stream": stream}
153
156
 
154
157
  # POST/PUT/PATCH 等需要 body 的方法,始终传递 data(即使为空)
155
158
  # GET/DELETE/HEAD 等无 body 方法,仅在有实际内容时传递
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: funcguard
3
- Version: 0.2.39
3
+ Version: 0.2.41
4
4
  Summary: FuncGuard是一个Python库,提供函数执行超时控制、重试机制、HTTP请求封装和格式化打印工具。
5
5
  Home-page: https://github.com/tinycen/funcguard
6
6
  Author: tinycen
@@ -32,16 +32,16 @@ FuncGuard是一个Python库,提供了函数执行超时控制和重试机制
32
32
 
33
33
  ## 功能特点
34
34
 
35
- | 分类 | 功能描述 |
36
- |------|----------|
37
- | **核心功能** | 函数执行超时控制、函数执行失败自动重试 |
38
- | **网络请求** | HTTP请求封装(支持自动重试)、MD5哈希、Basic Auth编码 |
39
- | **时间工具** | 时间日志记录、耗时统计、执行时间监控和警告、时间等待(带倒计时) |
40
- | **打印工具** | 格式化分隔线、块打印、标题打印、进度条显示 |
41
- | **IP工具** | 局域网IP检测、公网IP检测、IP格式验证 |
42
- | **pandas工具** | 数据填充、类型转换、JSON解析、数据筛选、统计分析 |
43
- | **计算工具** | 数值差异格式化(如+5、-3等) |
44
- | **日志工具** | 彩色日志输出、logger配置 |
35
+ | 分类 | 功能描述 | 文档 |
36
+ |------|----------|------|
37
+ | **核心功能** | 函数执行超时控制、函数执行失败自动重试 | - |
38
+ | **网络请求** | HTTP请求封装(支持自动重试)、MD5哈希、Basic Auth编码 | [查看](./docs/network.md) |
39
+ | **时间工具** | 时间日志记录、耗时统计、执行时间监控和警告、时间等待(带倒计时) | [查看](./docs/time_utils.md) |
40
+ | **打印工具** | 格式化分隔线、块打印、标题打印、进度条显示 | - |
41
+ | **IP工具** | 局域网IP检测、公网IP检测、IP格式验证 | - |
42
+ | **pandas工具** | 数据填充、类型转换、JSON解析、数据筛选、统计分析 | [查看](./docs/pd_utils.md) |
43
+ | **计算工具** | 数值差异格式化(如+5、-3等) | - |
44
+ | **日志工具** | 彩色日志输出、logger配置 | - |
45
45
 
46
46
  ## 安装/升级
47
47
 
@@ -124,6 +124,16 @@ response = send_request(
124
124
  timeout=30
125
125
  )
126
126
  print(response)
127
+
128
+ # 流式传输请求(用于大文件下载)
129
+ response = send_request(
130
+ method="GET",
131
+ url="https://api.example.com/largefile",
132
+ stream=True # 启用流式传输,通过 iter_content() 分块读取
133
+ )
134
+ for chunk in response.iter_content(chunk_size=8192):
135
+ # 处理数据块
136
+ pass
127
137
  ```
128
138
 
129
139
  #### 自动重试
@@ -534,7 +544,9 @@ print(f"当前价格: {current_price}, 变化: {price_change}") # 输出: 当
534
544
  | `pd_fill_na` / `pd_fill_nat` | 数据填充 | [查看](docs/pandas/fill.md) |
535
545
  | `pd_convert_columns` / `pd_convert_decimal` / `pd_convert_numeric_series` / `pd_convert_str_datetime` / `pd_convert_datetime_str` | 类型转换 | [查看](docs/pandas/convert.md) |
536
546
  | `pd_load_json` | JSON解析 | [查看](docs/pandas/json.md) |
537
- | `pd_filter` / `pd_count` | 数据筛选 | [查看](docs/pandas/filter.md) |
547
+ | `pd_filter` | 数据筛选 | [查看](docs/pandas/filter.md) |
548
+ | `pd_count` / `pd_value_counts` | 条件计数统计 | [查看](docs/pandas/count.md) |
549
+ | `pd_group_agg` | 分组聚合统计 | [查看](docs/pandas/agg.md) |
538
550
  | `pd_build_mask` / `pd_build_masks` / `pd_combine_masks` | 掩码构建 | [查看](docs/pandas/mask.md) |
539
551
  | `DataFrameStatistics` | 统计分析 | [查看](docs/pandas/statistics.md) |
540
552
  | `pd_cal_date_diff` / `pd_round_columns` | 日期计算和数值舍入 | [查看](docs/pandas/date.md) |
@@ -25,6 +25,7 @@ funcguard/pd_utils/filter.py
25
25
  funcguard/pd_utils/json_utils/__init__.py
26
26
  funcguard/pd_utils/json_utils/json_parser.py
27
27
  funcguard/pd_utils/statistics/__init__.py
28
+ funcguard/pd_utils/statistics/agg_utils.py
28
29
  funcguard/pd_utils/statistics/count_utils.py
29
30
  funcguard/pd_utils/statistics/df_statistics.py
30
31
  funcguard/pd_utils/statistics/mask_utils.py
@@ -9,7 +9,7 @@ except FileNotFoundError:
9
9
 
10
10
  setup(
11
11
  name='funcguard',
12
- version='0.2.39',
12
+ version='0.2.41',
13
13
  packages=find_packages(),
14
14
  install_requires=[
15
15
  'requests',
File without changes
File without changes
File without changes
File without changes