xlin 0.1.37__tar.gz → 0.1.39__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.
xlin-0.1.39/PKG-INFO ADDED
@@ -0,0 +1,282 @@
1
+ Metadata-Version: 2.1
2
+ Name: xlin
3
+ Version: 0.1.39
4
+ Summary: toolbox for LinXueyuan
5
+ License: MIT
6
+ Author: LinXueyuanStdio
7
+ Author-email: 23211526+LinXueyuanStdio@users.noreply.github.com
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Programming Language :: Python :: 2
10
+ Classifier: Programming Language :: Python :: 2.7
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.4
13
+ Classifier: Programming Language :: Python :: 3.5
14
+ Classifier: Programming Language :: Python :: 3.6
15
+ Classifier: Programming Language :: Python :: 3.7
16
+ Classifier: Programming Language :: Python :: 3.8
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Requires-Dist: loguru
22
+ Requires-Dist: pandas
23
+ Requires-Dist: pyexcel
24
+ Requires-Dist: pyexcel-xls
25
+ Requires-Dist: pyexcel-xlsx
26
+ Requires-Dist: pyyaml
27
+ Requires-Dist: tqdm
28
+ Requires-Dist: xlsxwriter
29
+ Description-Content-Type: text/markdown
30
+
31
+ # xlin
32
+
33
+ Python 工具代码集合,提供了丰富的工具函数,涵盖文件操作、数据处理、多进程处理等多个方面,旨在提高开发效率。
34
+
35
+ ## 安装
36
+
37
+ ```bash
38
+ pip install xlin --upgrade
39
+ ```
40
+
41
+ ## 使用方法
42
+
43
+ ```python
44
+ from xlin import *
45
+ ```
46
+
47
+ ### 文件操作类:`ls`,`rm` 和 `cp`
48
+ - `ls`: 列出文件或文件夹下的所有文件。
49
+ - `rm`: 删除文件或文件夹。
50
+ - `cp`: 复制文件或文件夹。
51
+
52
+ ```python
53
+ from xlin import ls, rm, cp
54
+
55
+ dir_path = "./data"
56
+ dir_path = "/mnt/data.json"
57
+ dir_path = "./data,/mnt/data.json"
58
+ dir_path = ["./data", "/mnt/data.json", "./data,/mnt/data.json"]
59
+ def filter_func(path: Path) -> bool:
60
+ return path.name.endswith('.json')
61
+
62
+ filepaths: list[Path] = ls(dir_path, filter=filter_func)
63
+ rm(dir_path)
64
+ cp(dir_path, "./backup_data") # 会根据最大公共前缀保持文件夹结构
65
+ ```
66
+
67
+ ### 读取类
68
+
69
+ - `read_as_json_list`:读取 JSON 文件为列表。
70
+ - `read_as_dataframe`:读取文件为表格。如果是文件夹,则读取文件夹下的所有文件为表格并拼接。
71
+ - `read_as_dataframe_dict`:读取文件为字典,键为表头,值为列数据。
72
+ - `load_text`:加载文本文件。
73
+ - `load_yaml`:加载 YAML 文件。
74
+ - `load_json`:加载 JSON 文件。
75
+ - `load_json_list`:加载 JSON 列表文件。
76
+
77
+
78
+ > `read_as_**` 函数支持文件夹或者文件,支持多种文件格式,包括 Excel、CSV、JSON、Parquet 等。
79
+ >
80
+ > `load_**` 函数主要用于加载单个文件,支持文本、YAML 和 JSON 格式。
81
+
82
+ ```python
83
+ from xlin import *
84
+ import pandas as pd
85
+
86
+ dir_path = "./data"
87
+ dir_path = "./data,data.xlsx,data.csv,data.json,data.jsonl,data.parquet,data.feather,data.pkl,data.h5,data.txt,data.tsv,data.xml,data.html,data.db"
88
+ dir_path = "./data,/mnt/data.json"
89
+ dir_path = ["./data", "/mnt/data.json", "./data,/mnt/data.json"]
90
+ df_single = read_as_dataframe(dir_path)
91
+ jsonlist = read_as_json_list(dir_path)
92
+ df_dict = read_as_dataframe_dict(dir_path) # xlsx or dirs
93
+ for sheet_name, df in df_dict.items():
94
+ print(f"Sheet: {sheet_name}")
95
+ print(df)
96
+
97
+ text = load_text("example.txt")
98
+ yaml_data = load_yaml("example.yaml")
99
+ json_data = load_json("example.json")
100
+ json_list_data = load_json_list("example.jsonl")
101
+ ```
102
+
103
+ ### 保存类
104
+
105
+ ```python
106
+ save_json(data, 'output.json')
107
+ save_json_list(jsonlist, 'output.jsonl')
108
+ save_df(df, 'output.xlsx')
109
+ save_df_dict(df_dict, 'output.xlsx') # 将 read_as_dataframe_dict 返回的字典保存为 Excel 文件。
110
+ save_df_from_jsonlist(jsonlist, 'output_from_jsonlist.xlsx')
111
+ append_to_json_list(data, 'output.jsonl')
112
+ ```
113
+
114
+ ### 并行处理类:`xmap`
115
+ 高效处理 JSON 列表,支持多进程/多线程。
116
+
117
+ ```python
118
+ from xlin import xmap
119
+
120
+ jsonlist = [{"id": 1, "text": "Hello"}, {"id": 2, "text": "World"}]
121
+
122
+ def work_func(item):
123
+ item["text"] = item["text"].upper()
124
+ return item
125
+
126
+ results = xmap(jsonlist, work_func, output_path="output.jsonl", batch_size=2)
127
+ print(results)
128
+ ```
129
+
130
+ ### 合并多个文件:`merge_json_list`,`merge_multiple_df_dict`
131
+ 合并多个 JSONL 文件。
132
+
133
+ ```python
134
+ from xlin import merge_json_list
135
+
136
+ filenames = ['example1.jsonl', 'example2.jsonl']
137
+ output_filename = 'merged.jsonl'
138
+ merge_json_list(filenames, output_filename)
139
+ ```
140
+
141
+ 合并多个 `read_as_dataframe_dict` 返回的字典。
142
+
143
+ ```python
144
+ from xlin import read_as_dataframe_dict, merge_multiple_df_dict
145
+
146
+ df_dict1 = read_as_dataframe_dict('example1.xlsx')
147
+ df_dict2 = read_as_dataframe_dict('example2.xlsx')
148
+ merged_df_dict = merge_multiple_df_dict([df_dict1, df_dict2])
149
+ for sheet_name, df in merged_df_dict.items():
150
+ print(f"Sheet: {sheet_name}")
151
+ print(df)
152
+ ```
153
+
154
+ ### 对 json 文件批量操作
155
+ - 对 JSON 列表应用更改:`apply_changes_to_paths`,`apply_changes_to_jsonlist`
156
+
157
+ ```python
158
+ from xlin import *
159
+
160
+ paths = [Path('example1.jsonl'), Path('example2.jsonl')]
161
+ jsonlist = [{"id": 1, "text": "Hello"}, {"id": 2, "text": "World"}]
162
+
163
+ def change_func(row):
164
+ if row["id"] == 1:
165
+ row["text"] = "New Hello"
166
+ return "updated", row
167
+ return "unchanged", row
168
+
169
+ changes = {"update_text": change_func}
170
+
171
+ # 1. 对文件路径应用更改
172
+ apply_changes_to_paths(paths, changes, save=True)
173
+ # 2. 对 JSON 列表应用更改
174
+ new_jsonlist, updated, deleted = apply_changes_to_jsonlist(jsonlist, changes)
175
+ print(new_jsonlist)
176
+ ```
177
+
178
+ ### 生成器
179
+ - 从多个文件中生成 JSON 列表的生成器:`generator_from_paths`
180
+
181
+ ```python
182
+ from xlin import generator_from_paths
183
+ from pathlib import Path
184
+
185
+ paths = [Path('example1.jsonl'), Path('example2.jsonl')]
186
+
187
+ for path, row in generator_from_paths(paths):
188
+ print(f"Path: {path}, Row: {row}")
189
+ ```
190
+
191
+ ### 数据转换
192
+ - DataFrame 和 JSON 列表之间的转换:`dataframe_to_json_list` 和 `jsonlist_to_dataframe`
193
+
194
+ ```python
195
+ from xlin import dataframe_to_json_list, jsonlist_to_dataframe
196
+ import pandas as pd
197
+
198
+ data = {'col1': [1, 2], 'col2': [3, 4]}
199
+ df = pd.DataFrame(data)
200
+
201
+ json_list = dataframe_to_json_list(df)
202
+ print(json_list)
203
+
204
+ new_df = jsonlist_to_dataframe(json_list)
205
+ print(new_df)
206
+ ```
207
+
208
+ ### 分组
209
+ - 对 DataFrame 进行分组:`grouped_col_list`、`grouped_col` 和 `grouped_row`
210
+
211
+ ```python
212
+ from xlin import grouped_col_list, grouped_col, grouped_row
213
+ import pandas as pd
214
+
215
+ data = {'query': ['a', 'a', 'b'], 'output': [1, 2, 3]}
216
+ df = pd.DataFrame(data)
217
+
218
+ grouped_col_list_result = grouped_col_list(df)
219
+ print(grouped_col_list_result)
220
+
221
+ grouped_col_result = grouped_col(df)
222
+ print(grouped_col_result)
223
+
224
+ grouped_row_result = grouped_row(df)
225
+ print(grouped_row_result)
226
+ ```
227
+
228
+ - 对 JSON 列表进行分组:`grouped_row_in_jsonlist`
229
+
230
+ ```python
231
+ from xlin import grouped_row_in_jsonlist
232
+
233
+ jsonlist = [{"query": "a", "output": 1}, {"query": "a", "output": 2}, {"query": "b", "output": 3}]
234
+ grouped_row_in_jsonlist_result = grouped_row_in_jsonlist(jsonlist)
235
+ print(grouped_row_in_jsonlist_result)
236
+ ```
237
+
238
+ ### 工具类
239
+
240
+ - `random_timestamp` 和 `random_timestamp_str`:生成随机时间戳和格式化的随机时间字符串。
241
+
242
+ ```python
243
+ from xlin import random_timestamp, random_timestamp_str
244
+
245
+ timestamp = random_timestamp()
246
+ print(timestamp)
247
+
248
+ timestamp_str = random_timestamp_str()
249
+ print(timestamp_str)
250
+ ```
251
+
252
+
253
+ - `df_dict_summary`: 对 `read_as_dataframe_dict` 返回的字典进行总结,返回一个 DataFrame 包含每个表的基本信息。
254
+
255
+ ```python
256
+ from xlin import read_as_dataframe_dict, df_dict_summary
257
+
258
+ df_dict = read_as_dataframe_dict('example.xlsx')
259
+ summary = df_dict_summary(df_dict)
260
+ print(summary)
261
+ ```
262
+
263
+ - `text_is_all_chinese` 和 `text_contains_chinese`:判断文本是否全为中文或是否包含中文。
264
+
265
+ ```python
266
+ from xlin import text_is_all_chinese, text_contains_chinese
267
+
268
+ text1 = "你好"
269
+ text2 = "Hello 你好"
270
+
271
+ print(text_is_all_chinese(text1)) # True
272
+ print(text_is_all_chinese(text2)) # False
273
+ print(text_contains_chinese(text2)) # True
274
+ ```
275
+
276
+ ## 许可证
277
+
278
+ 本项目采用 MIT 许可证,详情请参阅 [LICENSE](LICENSE) 文件。
279
+
280
+ ## 作者
281
+
282
+ - LinXueyuanStdio <23211526+LinXueyuanStdio@users.noreply.github.com>
xlin-0.1.39/README.md ADDED
@@ -0,0 +1,252 @@
1
+ # xlin
2
+
3
+ Python 工具代码集合,提供了丰富的工具函数,涵盖文件操作、数据处理、多进程处理等多个方面,旨在提高开发效率。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pip install xlin --upgrade
9
+ ```
10
+
11
+ ## 使用方法
12
+
13
+ ```python
14
+ from xlin import *
15
+ ```
16
+
17
+ ### 文件操作类:`ls`,`rm` 和 `cp`
18
+ - `ls`: 列出文件或文件夹下的所有文件。
19
+ - `rm`: 删除文件或文件夹。
20
+ - `cp`: 复制文件或文件夹。
21
+
22
+ ```python
23
+ from xlin import ls, rm, cp
24
+
25
+ dir_path = "./data"
26
+ dir_path = "/mnt/data.json"
27
+ dir_path = "./data,/mnt/data.json"
28
+ dir_path = ["./data", "/mnt/data.json", "./data,/mnt/data.json"]
29
+ def filter_func(path: Path) -> bool:
30
+ return path.name.endswith('.json')
31
+
32
+ filepaths: list[Path] = ls(dir_path, filter=filter_func)
33
+ rm(dir_path)
34
+ cp(dir_path, "./backup_data") # 会根据最大公共前缀保持文件夹结构
35
+ ```
36
+
37
+ ### 读取类
38
+
39
+ - `read_as_json_list`:读取 JSON 文件为列表。
40
+ - `read_as_dataframe`:读取文件为表格。如果是文件夹,则读取文件夹下的所有文件为表格并拼接。
41
+ - `read_as_dataframe_dict`:读取文件为字典,键为表头,值为列数据。
42
+ - `load_text`:加载文本文件。
43
+ - `load_yaml`:加载 YAML 文件。
44
+ - `load_json`:加载 JSON 文件。
45
+ - `load_json_list`:加载 JSON 列表文件。
46
+
47
+
48
+ > `read_as_**` 函数支持文件夹或者文件,支持多种文件格式,包括 Excel、CSV、JSON、Parquet 等。
49
+ >
50
+ > `load_**` 函数主要用于加载单个文件,支持文本、YAML 和 JSON 格式。
51
+
52
+ ```python
53
+ from xlin import *
54
+ import pandas as pd
55
+
56
+ dir_path = "./data"
57
+ dir_path = "./data,data.xlsx,data.csv,data.json,data.jsonl,data.parquet,data.feather,data.pkl,data.h5,data.txt,data.tsv,data.xml,data.html,data.db"
58
+ dir_path = "./data,/mnt/data.json"
59
+ dir_path = ["./data", "/mnt/data.json", "./data,/mnt/data.json"]
60
+ df_single = read_as_dataframe(dir_path)
61
+ jsonlist = read_as_json_list(dir_path)
62
+ df_dict = read_as_dataframe_dict(dir_path) # xlsx or dirs
63
+ for sheet_name, df in df_dict.items():
64
+ print(f"Sheet: {sheet_name}")
65
+ print(df)
66
+
67
+ text = load_text("example.txt")
68
+ yaml_data = load_yaml("example.yaml")
69
+ json_data = load_json("example.json")
70
+ json_list_data = load_json_list("example.jsonl")
71
+ ```
72
+
73
+ ### 保存类
74
+
75
+ ```python
76
+ save_json(data, 'output.json')
77
+ save_json_list(jsonlist, 'output.jsonl')
78
+ save_df(df, 'output.xlsx')
79
+ save_df_dict(df_dict, 'output.xlsx') # 将 read_as_dataframe_dict 返回的字典保存为 Excel 文件。
80
+ save_df_from_jsonlist(jsonlist, 'output_from_jsonlist.xlsx')
81
+ append_to_json_list(data, 'output.jsonl')
82
+ ```
83
+
84
+ ### 并行处理类:`xmap`
85
+ 高效处理 JSON 列表,支持多进程/多线程。
86
+
87
+ ```python
88
+ from xlin import xmap
89
+
90
+ jsonlist = [{"id": 1, "text": "Hello"}, {"id": 2, "text": "World"}]
91
+
92
+ def work_func(item):
93
+ item["text"] = item["text"].upper()
94
+ return item
95
+
96
+ results = xmap(jsonlist, work_func, output_path="output.jsonl", batch_size=2)
97
+ print(results)
98
+ ```
99
+
100
+ ### 合并多个文件:`merge_json_list`,`merge_multiple_df_dict`
101
+ 合并多个 JSONL 文件。
102
+
103
+ ```python
104
+ from xlin import merge_json_list
105
+
106
+ filenames = ['example1.jsonl', 'example2.jsonl']
107
+ output_filename = 'merged.jsonl'
108
+ merge_json_list(filenames, output_filename)
109
+ ```
110
+
111
+ 合并多个 `read_as_dataframe_dict` 返回的字典。
112
+
113
+ ```python
114
+ from xlin import read_as_dataframe_dict, merge_multiple_df_dict
115
+
116
+ df_dict1 = read_as_dataframe_dict('example1.xlsx')
117
+ df_dict2 = read_as_dataframe_dict('example2.xlsx')
118
+ merged_df_dict = merge_multiple_df_dict([df_dict1, df_dict2])
119
+ for sheet_name, df in merged_df_dict.items():
120
+ print(f"Sheet: {sheet_name}")
121
+ print(df)
122
+ ```
123
+
124
+ ### 对 json 文件批量操作
125
+ - 对 JSON 列表应用更改:`apply_changes_to_paths`,`apply_changes_to_jsonlist`
126
+
127
+ ```python
128
+ from xlin import *
129
+
130
+ paths = [Path('example1.jsonl'), Path('example2.jsonl')]
131
+ jsonlist = [{"id": 1, "text": "Hello"}, {"id": 2, "text": "World"}]
132
+
133
+ def change_func(row):
134
+ if row["id"] == 1:
135
+ row["text"] = "New Hello"
136
+ return "updated", row
137
+ return "unchanged", row
138
+
139
+ changes = {"update_text": change_func}
140
+
141
+ # 1. 对文件路径应用更改
142
+ apply_changes_to_paths(paths, changes, save=True)
143
+ # 2. 对 JSON 列表应用更改
144
+ new_jsonlist, updated, deleted = apply_changes_to_jsonlist(jsonlist, changes)
145
+ print(new_jsonlist)
146
+ ```
147
+
148
+ ### 生成器
149
+ - 从多个文件中生成 JSON 列表的生成器:`generator_from_paths`
150
+
151
+ ```python
152
+ from xlin import generator_from_paths
153
+ from pathlib import Path
154
+
155
+ paths = [Path('example1.jsonl'), Path('example2.jsonl')]
156
+
157
+ for path, row in generator_from_paths(paths):
158
+ print(f"Path: {path}, Row: {row}")
159
+ ```
160
+
161
+ ### 数据转换
162
+ - DataFrame 和 JSON 列表之间的转换:`dataframe_to_json_list` 和 `jsonlist_to_dataframe`
163
+
164
+ ```python
165
+ from xlin import dataframe_to_json_list, jsonlist_to_dataframe
166
+ import pandas as pd
167
+
168
+ data = {'col1': [1, 2], 'col2': [3, 4]}
169
+ df = pd.DataFrame(data)
170
+
171
+ json_list = dataframe_to_json_list(df)
172
+ print(json_list)
173
+
174
+ new_df = jsonlist_to_dataframe(json_list)
175
+ print(new_df)
176
+ ```
177
+
178
+ ### 分组
179
+ - 对 DataFrame 进行分组:`grouped_col_list`、`grouped_col` 和 `grouped_row`
180
+
181
+ ```python
182
+ from xlin import grouped_col_list, grouped_col, grouped_row
183
+ import pandas as pd
184
+
185
+ data = {'query': ['a', 'a', 'b'], 'output': [1, 2, 3]}
186
+ df = pd.DataFrame(data)
187
+
188
+ grouped_col_list_result = grouped_col_list(df)
189
+ print(grouped_col_list_result)
190
+
191
+ grouped_col_result = grouped_col(df)
192
+ print(grouped_col_result)
193
+
194
+ grouped_row_result = grouped_row(df)
195
+ print(grouped_row_result)
196
+ ```
197
+
198
+ - 对 JSON 列表进行分组:`grouped_row_in_jsonlist`
199
+
200
+ ```python
201
+ from xlin import grouped_row_in_jsonlist
202
+
203
+ jsonlist = [{"query": "a", "output": 1}, {"query": "a", "output": 2}, {"query": "b", "output": 3}]
204
+ grouped_row_in_jsonlist_result = grouped_row_in_jsonlist(jsonlist)
205
+ print(grouped_row_in_jsonlist_result)
206
+ ```
207
+
208
+ ### 工具类
209
+
210
+ - `random_timestamp` 和 `random_timestamp_str`:生成随机时间戳和格式化的随机时间字符串。
211
+
212
+ ```python
213
+ from xlin import random_timestamp, random_timestamp_str
214
+
215
+ timestamp = random_timestamp()
216
+ print(timestamp)
217
+
218
+ timestamp_str = random_timestamp_str()
219
+ print(timestamp_str)
220
+ ```
221
+
222
+
223
+ - `df_dict_summary`: 对 `read_as_dataframe_dict` 返回的字典进行总结,返回一个 DataFrame 包含每个表的基本信息。
224
+
225
+ ```python
226
+ from xlin import read_as_dataframe_dict, df_dict_summary
227
+
228
+ df_dict = read_as_dataframe_dict('example.xlsx')
229
+ summary = df_dict_summary(df_dict)
230
+ print(summary)
231
+ ```
232
+
233
+ - `text_is_all_chinese` 和 `text_contains_chinese`:判断文本是否全为中文或是否包含中文。
234
+
235
+ ```python
236
+ from xlin import text_is_all_chinese, text_contains_chinese
237
+
238
+ text1 = "你好"
239
+ text2 = "Hello 你好"
240
+
241
+ print(text_is_all_chinese(text1)) # True
242
+ print(text_is_all_chinese(text2)) # False
243
+ print(text_contains_chinese(text2)) # True
244
+ ```
245
+
246
+ ## 许可证
247
+
248
+ 本项目采用 MIT 许可证,详情请参阅 [LICENSE](LICENSE) 文件。
249
+
250
+ ## 作者
251
+
252
+ - LinXueyuanStdio <23211526+LinXueyuanStdio@users.noreply.github.com>
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "xlin"
3
- version = "0.1.37"
3
+ version = "0.1.39"
4
4
  description = "toolbox for LinXueyuan"
5
5
  authors = ["LinXueyuanStdio <23211526+LinXueyuanStdio@users.noreply.github.com>"]
6
6
  license = "MIT"
@@ -0,0 +1,12 @@
1
+ from .dataframe_util import *
2
+ from .datetime_util import *
3
+ from .file_util import *
4
+ from .image_util import *
5
+ from .jsonlist_util import *
6
+ from .metric import *
7
+ from .multiprocess_util import *
8
+ from .statistic import *
9
+ from .text_util import *
10
+ from .timing_util import *
11
+ from .xlsx_util import *
12
+ from .yaml_util import *
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  from collections import defaultdict
2
3
  import os
3
4
  from typing import Callable, Dict, List, Optional, Tuple, Union
@@ -7,9 +8,9 @@ from loguru import logger
7
8
  import pandas as pd
8
9
  import pyexcel
9
10
 
10
- from xlin.util import ls
11
- from xlin.jsonl import dataframe_to_json_list, load_json, load_json_list, save_json_list
12
- from xlin.xls2xlsx import is_xslx
11
+ from xlin.file_util import ls
12
+ from xlin.jsonlist_util import dataframe_to_json_list, load_json, load_json_list, save_json_list
13
+ from xlin.xlsx_util import is_xslx
13
14
 
14
15
 
15
16
  def read_as_dataframe(
@@ -77,7 +78,9 @@ def read_as_dataframe(
77
78
  elif filename.endswith(".html"):
78
79
  df = pd.read_html(filepath)[0]
79
80
  elif filename.endswith(".db"):
80
- df = pd.read_sql_table(sheet_name, filepath)
81
+ if sheet_name is None:
82
+ raise ValueError("读取 .db 文件需要提供 sheet_name 作为表名")
83
+ df = pd.read_sql_table(sheet_name, f"sqlite:///{filepath}")
81
84
  else:
82
85
  raise ValueError(
83
86
  (
@@ -267,3 +270,39 @@ def split_dataframe(
267
270
  df_i.to_excel(filepath, index=False)
268
271
  df_list.append(df_i)
269
272
  return df_list
273
+
274
+ def append_column(df: pd.DataFrame, query_column: str, output_column: str, transform):
275
+ query = df[query_column].tolist()
276
+ loop = asyncio.get_event_loop()
277
+ result = loop.run_until_complete(transform(query))
278
+ df[output_column] = [str(r) for r in result]
279
+ return df
280
+
281
+ def grouped_col_list(df: pd.DataFrame, key_col="query", value_col="output"):
282
+ grouped = defaultdict(list)
283
+ if key_col not in df.columns:
284
+ logger.warning(f"`{key_col}` not in columns: {list(df.columns)}")
285
+ return grouped
286
+ for i, row in df.iterrows():
287
+ grouped[row[key_col]].append(row[value_col])
288
+ return grouped
289
+
290
+
291
+ def grouped_col(df: pd.DataFrame, key_col="query", value_col="output"):
292
+ grouped = {}
293
+ if key_col not in df.columns:
294
+ logger.warning(f"`{key_col}` not in columns: {list(df.columns)}")
295
+ return grouped
296
+ for i, row in df.iterrows():
297
+ grouped[row[key_col]] = row[value_col]
298
+ return grouped
299
+
300
+
301
+ def grouped_row(df: pd.DataFrame, key_col="query"):
302
+ grouped = defaultdict(list)
303
+ if key_col not in df.columns:
304
+ logger.warning(f"`{key_col}` not in columns: {list(df.columns)}")
305
+ return grouped
306
+ for i, row in df.iterrows():
307
+ grouped[row[key_col]].append(row)
308
+ return grouped
@@ -0,0 +1,21 @@
1
+
2
+
3
+ import datetime
4
+ import random
5
+
6
+
7
+ date_str = datetime.datetime.now().strftime("%Y%m%d")
8
+ datetime_str = datetime.datetime.now().strftime("%Y%m%d_%Hh%Mm%Ss")
9
+
10
+
11
+ def random_timestamp(start_timestamp=None, end_timestamp=None):
12
+ if start_timestamp is None:
13
+ start_timestamp = datetime.datetime(2024, 1, 1).timestamp()
14
+ if end_timestamp is None:
15
+ end_timestamp = datetime.datetime.now().timestamp()
16
+ return random.uniform(start_timestamp, end_timestamp)
17
+
18
+
19
+ def random_timestamp_str(start_timestamp=None, end_timestamp=None, format="%Y年%m月%d日%H时%M分"):
20
+ return datetime.datetime.fromtimestamp(random_timestamp(start_timestamp, end_timestamp)).strftime(format)
21
+