-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathlogic.py
93 lines (80 loc) · 3.88 KB
/
logic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from typing import Dict, List, Union
import re
import json
import csv
from zipfile import is_zipfile, ZipFile
__author__ = "Dmitry S. Korottsev"
__copyright__ = "Copyright 2021"
__credits__ = []
__license__ = "GPL v3"
__version__ = "1.12"
__maintainer__ = "Dmitry S. Korottsev"
__email__ = "[email protected]"
__status__ = "Development"
def get_dict_from_csv(filepath: str) -> Dict[str, str]:
"""
создаёт словарь Python из csv-файла c 2-мя столбцами и разделителем '|'
:param filepath: str
:return: dict
"""
with open(filepath, "r", newline="", encoding="utf-8") as file:
reader = csv.reader(file, delimiter='|', quoting=csv.QUOTE_NONE)
dic = {row[0]: row[1] for row in reader}
return dic
def write_settings(key: str, value: Union[bool, str]):
"""
сохраняет настройки программы в файл 'settings.json'
"""
with open('settings.json', 'r') as f:
sd = json.load(f)
sd[key] = value
with open('settings.json', 'w') as f:
json.dump(sd, f, sort_keys=True, indent=4, ensure_ascii=False)
def get_settings(key: str) -> Union[bool, str]:
"""
возвращает значение параметра настройки программы по указанному ключу, сохранённое в файле 'settings.json'
:param key: str
"""
with open('settings.json', 'r') as f:
sd = json.load(f)
return sd[key]
def to_shorten_a_long_name(names: Union[List[str], str]) -> Union[List[str], str]:
"""
сокращает слова и словосочетания в соответствии со словарём сокращений, заданным в файле 'replace.csv'
:param names: list or str
:return: list or str
"""
dictionary_of_abbreviations = get_dict_from_csv('replace.csv')
if isinstance(names, list):
for old_name in dictionary_of_abbreviations:
if names:
for item in names:
temp = item
i_of_it = names.index(item)
new_item = re.sub(old_name, dictionary_of_abbreviations[old_name], temp, flags=re.IGNORECASE)
names[i_of_it] = new_item
if isinstance(names, str):
for old_name in dictionary_of_abbreviations:
names = re.sub(old_name, dictionary_of_abbreviations[old_name], names, flags=re.IGNORECASE)
return names
def gauss_area(polygon_points: List[List[float]]) -> float:
"""
Формула площади Гаусса, определяет площадь простого многоугольника по декартовым координатам на плоскости
В правой системе координат положительный знак площади указывает направление точек против часовой стрелки,
отрицательный - направление точек по часовой стрелке
:return: float
"""
one = sum([polygon_points[i][0] * polygon_points[i + 1][1] for i in range(len(polygon_points) - 1)])
two = sum([polygon_points[i][1] * polygon_points[i + 1][0] for i in range(len(polygon_points) - 1)])
return (two - one) / 2
def extract_all_zipfiles(names_of_zipfiles: List[str], folder: str):
"""
Распаковывает все указанные zip-архивы в указанной папке. Входящие аргументы: список имён архивов, которые надо
распаковать и полный путь к папке, в которой они лежат.
:param names_of_zipfiles: list
:param folder: str
"""
for zf in names_of_zipfiles:
if is_zipfile(folder + '//' + zf):
with ZipFile(folder + '//' + zf, 'r') as z:
z.extractall(folder)