ezKit 1.9.8__tar.gz → 1.9.9__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {ezkit-1.9.8/ezKit.egg-info → ezkit-1.9.9}/PKG-INFO +1 -1
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/utils.py +35 -67
- {ezkit-1.9.8 → ezkit-1.9.9/ezKit.egg-info}/PKG-INFO +1 -1
- {ezkit-1.9.8 → ezkit-1.9.9}/setup.py +1 -1
- {ezkit-1.9.8 → ezkit-1.9.9}/LICENSE +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/MANIFEST.in +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/README.md +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/__init__.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/bottle.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/bottle_extensions.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/cipher.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/cls.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/database.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/http.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/mongo.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/qywx.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/redis.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/sendemail.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/stock.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/token.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit/xftp.py +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit.egg-info/SOURCES.txt +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit.egg-info/dependency_links.txt +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit.egg-info/requires.txt +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/ezKit.egg-info/top_level.txt +0 -0
- {ezkit-1.9.8 → ezkit-1.9.9}/setup.cfg +0 -0
@@ -8,6 +8,7 @@ import subprocess
|
|
8
8
|
import time
|
9
9
|
import tomllib
|
10
10
|
from copy import deepcopy
|
11
|
+
from itertools import islice
|
11
12
|
from multiprocessing import Pool, Process
|
12
13
|
from multiprocessing.pool import ThreadPool
|
13
14
|
from pathlib import Path
|
@@ -352,90 +353,57 @@ def list_dict_sorted_by_key(
|
|
352
353
|
logger.exception(e)
|
353
354
|
return None
|
354
355
|
|
355
|
-
|
356
356
|
def list_split(
|
357
357
|
data: list,
|
358
358
|
number: int,
|
359
359
|
equally: bool = False
|
360
360
|
) -> list | None:
|
361
|
-
"""
|
361
|
+
"""列表分割"""
|
362
|
+
|
362
363
|
# 列表分割
|
363
364
|
#
|
364
|
-
# 默认: 将 list 以 number
|
365
|
-
#
|
366
|
-
# data = [1, 2, 3, 4, 5, 6, 7]
|
367
|
-
#
|
368
|
-
# list_split(data, 2) -> 将 data 以 2个元素为一个 list 分割
|
369
|
-
# [[1, 2], [3, 4], [5, 6], [7]]
|
365
|
+
# 默认: 将 list 以 number 个元素为一个子 list 分割
|
370
366
|
#
|
371
|
-
#
|
372
|
-
#
|
367
|
+
# data = [1, 2, 3, 4, 5, 6, 7] 奇数个元素
|
368
|
+
# list_split(data, 2) -> [[1, 2], [3, 4], [5, 6], [7]] 将 data 以 2个元素 为一个 list 分割
|
369
|
+
# list_split(data, 3) -> [[1, 2, 3], [4, 5, 6], [7]] 将 data 以 3个元素 为一个 list 分割
|
373
370
|
#
|
374
|
-
#
|
371
|
+
# data = [1, 2, 3, 4, 5, 6, 7, 8] 偶数个元素
|
372
|
+
# list_split(data, 2) -> [[1, 2], [3, 4], [5, 6], [7, 8]] 将 data 以 2个元素 为一个 list 分割
|
373
|
+
# list_split(data, 3) -> [[1, 2, 3], [4, 5, 6], [7, 8]] 将 data 以 3个元素 为一个 list 分割
|
375
374
|
#
|
376
|
-
#
|
375
|
+
# equally 为 True 时, 将 list 平均分成 number 个元素的子 list
|
377
376
|
#
|
378
|
-
#
|
379
|
-
#
|
377
|
+
# data = [1, 2, 3, 4, 5, 6, 7] 奇数个元素
|
378
|
+
# list_split(data, 2, True) -> [[1, 2, 3, 4], [5, 6, 7]] 将 data 平均分成 2个子list
|
379
|
+
# list_split(data, 3, True) -> [[1, 2, 3], [4, 5, 6], [7]] 将 data 平均分成 3个子list
|
380
380
|
#
|
381
|
-
#
|
382
|
-
#
|
383
|
-
#
|
384
|
-
# list_split_equally(data, 7) -> 将 data 平均分成 7 份
|
385
|
-
# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17], [18, 19]]
|
386
|
-
|
387
|
-
try:
|
388
|
-
|
389
|
-
# 数据拷贝
|
390
|
-
_data_object = deepcopy(data)
|
381
|
+
# data = [1, 2, 3, 4, 5, 6, 7, 8] 偶数个元素
|
382
|
+
# list_split(data, 2, True) -> [[1, 2, 3, 4], [5, 6, 7, 8]] 将 data 平均分成 2个子list
|
383
|
+
# list_split(data, 3, True) -> [[1, 2, 3], [4, 5, 6], [7, 8]] 将 data 平均分成 3个子list
|
391
384
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
_data_result = []
|
397
|
-
|
398
|
-
_step_number: Optional[int] = None
|
399
|
-
|
400
|
-
if _data_length < number:
|
385
|
+
# 判断参数是否正确
|
386
|
+
match True:
|
387
|
+
case True if not isTrue(data, list):
|
388
|
+
logger.error("argument error: data")
|
401
389
|
return None
|
390
|
+
case True if not isTrue(number, int):
|
391
|
+
logger.error("argument error: number")
|
392
|
+
return None
|
393
|
+
case _:
|
394
|
+
pass
|
402
395
|
|
403
|
-
|
404
|
-
|
405
|
-
_data_result = [[i] for i in _data_object]
|
406
|
-
|
407
|
-
else:
|
408
|
-
|
409
|
-
if isTrue(equally, bool):
|
410
|
-
|
411
|
-
_step_number = step_number_for_split_equally(_data_length, number)
|
412
|
-
|
413
|
-
if _data_length % number == 0:
|
414
|
-
|
415
|
-
index_number_list = list(range(0, _data_length, number))
|
416
|
-
for index_number in index_number_list:
|
417
|
-
_data_result.append(deepcopy(_data_object[index_number:index_number + number]))
|
418
|
-
|
419
|
-
else:
|
420
|
-
|
421
|
-
# 前一部分
|
422
|
-
if _step_number is not None:
|
423
|
-
previous_end_number = (_data_length % number) * _step_number
|
424
|
-
previous_index_number_list = list(range(0, previous_end_number, _step_number))
|
425
|
-
for index_number in previous_index_number_list:
|
426
|
-
_data_result.append(deepcopy(_data_object[index_number:index_number + _step_number]))
|
427
|
-
|
428
|
-
# 后一部分
|
429
|
-
next_number_list = list(range(previous_end_number, _data_length, _step_number - 1))
|
430
|
-
for index_number in next_number_list:
|
431
|
-
_data_result.append(deepcopy(_data_object[index_number:index_number + (_step_number - 1)]))
|
432
|
-
|
433
|
-
else:
|
396
|
+
try:
|
434
397
|
|
435
|
-
|
436
|
-
|
398
|
+
# 要将列表平均分成 n 个子列表
|
399
|
+
if isTrue(equally, bool):
|
400
|
+
it = iter(data)
|
401
|
+
chunk_size = (len(data) + number - 1) // number # 每组至少多少个元素
|
402
|
+
return [list(islice(it, chunk_size)) for _ in range(number)]
|
437
403
|
|
438
|
-
|
404
|
+
# 将列表按每 n 个元素为一个列表进行分割
|
405
|
+
it = iter(data)
|
406
|
+
return [list(islice(it, number)) for _ in range((len(data) + number - 1) // number)]
|
439
407
|
|
440
408
|
except Exception as e:
|
441
409
|
logger.exception(e)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|