{"id":368115,"date":"2024-05-21T03:35:47","date_gmt":"2024-05-21T03:35:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=368115"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=368115","title":{"rendered":"<span>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Python. \u0427\u0430\u0441\u0442\u044c 02<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/793348\/\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043e\u0442 \u0446\u0438\u0444\u0440 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u043e\u0447\u0438\u0449\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043e\u0442 \u0431\u0443\u043a\u0432 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 email. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041d\u0443 \u0438 \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/18b\/775\/117\/18b775117ee81bfbf5eece06a325b172.png\" width=\"2000\" height=\"1284\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/18b\/775\/117\/18b775117ee81bfbf5eece06a325b172.png\"\/><\/figure>\n<h3>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0442\u0440\u043e\u043a \u043e\u0442 \u0431\u0443\u043a\u0432 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0443\u0434\u0430\u043b\u044f\u043b\u0438 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430. \u0418 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u0430 \u043d\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0438 \u0441\u044b\u0440\u043e\u043c \u0432\u0438\u0434\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e phone_normalize(phone: str) -> str, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0435\u0435, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043e\u0442 \u0441\u043a\u043e\u0431\u043e\u043a, \u043a\u0430\u0432\u044b\u0447\u0435\u043a \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0443\u0441\u0442\u043e\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0438\u0449\u0435\u043d\u0430. \u0415\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0435\u0441\u0442\u044c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043d\u0435\u043c. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0430 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u0445, \u0431\u043e\u043b\u044c\u0448\u0435 11 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 6 \u0434\u043e 10, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e,  \u0441 \u043a\u0430\u043a\u043e\u0439 \u0446\u0438\u0444\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u0432\u044f\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e 7. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043d\u043e\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u0446\u0438\u0444\u0440 11, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u0446\u0438\u0444\u0440\u0443. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 8, \u043c\u0435\u043d\u044f\u044e \u043d\u0430 7. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 8 \u043d\u0430\u0434\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0442\u043e\u0440\u0443\u044e \u0446\u0438\u0444\u0440\u0443. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0434\u0435\u0432\u044f\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0437\u0430\u043c\u0435\u043d\u0443. \u041d\u0443 \u0438 \u0435\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 7, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<pre><code class=\"python\">def email_normalize(mail: str) -> str:     if \"@\" in mail:         mail = mail.split(\"@\")         if mail[0].strip():             if \".\" in mail[1]:                 ch_mail = mail[1].split(\".\")                 if len(ch_mail) == 2:                     return \"@\".join(mail) if validators.email(\"@\".join(mail)) else \"\"             else:                 for char in \",:;!_*-+()\/#%&amp;\":                     if char in mail[1]:                         ch_mail = mail[1].replace(char, \".\")                         if len(ch_mail.split(\".\")) == 2:                             mail = \"@\".join([mail[0], ch_mail])                             return mail if validators.email(mail) else \"\"         return \"\"       return \"\"<\/code><\/pre>\n<h3>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 email<\/h3>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u043e\u0431\u0430\u043a\u0438. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u044b\u043b\u043e\u043c. \u041d\u0435\u0442, \u0442\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0443 \u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0447\u043a\u0438. \u041f\u043e\u0442\u043e\u043c\u0443, \u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445 \u043d\u0430 \u043d\u0435\u0435.<\/p>\n<pre><code class=\"python\">def email_normalize(mail: str) -> str:     return mail.strip().replace(\"\/\", \".\") if \"@\" in mail else \"\"<\/code><\/pre>\n<h3>\u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u043a<\/h3>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0438 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0432\u0430\u043c \u0445\u043e\u0447\u0443 \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0441\u043f\u0438\u0441\u043a\u0435. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0435, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a. \u0417\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u043e\u043b\u044c\u0448\u0435 1, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c True, \u043c\u0435\u043d\u044c\u0448\u0435 False.<\/p>\n<pre><code class=\"python\">def count_get(items: list) -> bool:     cnt = 0     for item in items:         if item.strip():             cnt += 1     return True if cnt > 1 else False<\/code><\/pre>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0444\u0430\u0439\u043b\u0430 \u00abcsv\u00bb<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0444\u0430\u0439\u043b \u00ab.csv\u00bb \u0438 \u043e\u0431\u0447\u0438\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0438\u0445. \u041d\u0443 \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b \u0444\u0430\u0439\u043b, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0438 \u043e\u0447\u0438\u0449\u0430\u043b.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e read_files(file: str, name: str, ascii_l=True) -> None. \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u00ab.csv\u00bb \u0444\u0430\u0439\u043b\u0443, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u043e\u0447\u0438\u0449\u0435\u043d\u043d\u043e\u0435 \u043e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ascii_l \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u043d \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412\u0435\u0434\u044c \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e-\u0440\u0443\u0441\u0441\u043a\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b \u00ab.csv\u00bb. \u0412 \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c. \u0412 \u043c\u043e\u0435\u043c \u0444\u0430\u0439\u043b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab|\u00bb. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0437\u0430\u043f\u044f\u0442\u0430\u044f \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0445. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0423 \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438. \u041f\u043e\u0442\u043e\u043c\u0443 \u0438\u0445 \u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439, \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e, \u0442\u043e \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0422\u0430\u043a, \u0441\u043a\u0430\u0436\u0435\u043c, \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0432\u0438\u0434\u0443 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u042d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u041a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043d\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0438\u043c \u0441 \u0432\u0430\u043c\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443. \u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0424.\u0418.\u041e., email, \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a rows_list. \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0443\u0447\u043d\u043e.<\/p>\n<pre><code class=\"python\">def read_files(file: str, name: str, ascii_l=True) -> None:     global rows_list     with open(file, \"r\", encoding=\"utf-8\") as cs:         for nm, row in enumerate(csv.reader(cs, delimiter=\"|\")):             if nm == 0:                 rows_list.append(row)                 continue             phone, email, fio, uname = row             fio = fio_normalize(fio, ascii_l)             email = email_normalize(email)             phone = phone_normalize(phone)             uname = uname.encode().decode()             if len(uname) > 50:                 uname = \"\"             if count_get([phone, email, fio, uname]):                 rows_list.append([phone, email, fio, uname])             else:                 continue             print(f\"\\r{nm+1} | {fio} | {phone} | {email} | {uname}\", end=\"\")             if len(rows_list) == 100000:                 with open(f\"{name}_clean.csv\", mode=\"a\", encoding='utf-8', newline='') as csv_f:                     file_writer = csv.writer(csv_f, delimiter=\";\")                     file_writer.writerows(rows_list)                 rows_list.clear()<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0440\u0430\u0432\u043d\u043e 100 000, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0444\u0430\u0439\u043b. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u0440\u0446\u0438\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443. \u0424\u0443\u043d\u043a\u0446\u0438\u044f main<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0435\u043c\u0441\u044f \u043a \u0444\u0438\u043d\u0430\u043b\u0443 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e main. \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0440\u043e\u0434\u0435 \u0434\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430 \u0443\u0436\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0410 \u043d\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u0432\u0432\u043e\u0434\u0443 \u00abn\u00bb. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0444\u0430\u0439\u043b, \u0438 \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0444\u0430\u0439\u043b. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d \u00ab.csv\u00bb \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u2013 \u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u0417\u0430\u043c\u0435\u0440\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p> \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u0444\u0430\u0439\u043b\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u0438\u043c\u044f \u0438 \u043a\u043e\u043b-\u0432\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e. \u041d\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0447\u0438\u0441\u0442\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u043f\u0443\u0441\u0442 \u043b\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u00ab.csv\u00bb. \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<pre><code class=\"python\">def main() -> None:     global rows_list     path = input(\"path file: >>> \")     ascii_l = input(\"ascii_l: >>> \")     if not Path(path).exists() or not path or not Path(path).is_file():         exit(0)     tm = time.monotonic()     name = Path(path).name.removesuffix(Path(path).suffix)     cnt_line = sum(1 for _ in open(path, \"rb\"))     print(f\"\\n{Path(path).name} | Lines: {cnt_line}\\n{'*' * 35}\")     if ascii_l == \"n\":         read_files(path, name, ascii_l=False)     else:         read_files(path, name, ascii_l=True)      if 0 &lt; len(rows_list) &lt; 100000:         with open(f\"{name}_clean.csv\", mode=\"a\", encoding='utf-8', newline='') as csv_f:             file_writer = csv.writer(csv_f, delimiter=\";\")             file_writer.writerows(rows_list)         rows_list.clear()      ch_time = (f'All complete | {(int(time.monotonic() - tm) \/\/ 3600) % 24:d} h. '                f'{(int(time.monotonic() - tm) \/\/ 60) % 60:02d} m. {int(time.monotonic() - tm) % 60:02d} s.')     lnt = len(ch_time)     print(f'\\n{\"-\" * lnt}\\n{ch_time}\\n{\"-\" * lnt}')   if __name__ == \"__main__\":     main()<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0438 \u0432\u0441\u0435. \u041d\u0438\u0436\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/p>\n<pre><code class=\"python\">\"\"\" pip install transliterate \"\"\" import csv import string import time from pathlib import Path  import validators from transliterate import translit  from transliterate import translit  csv.field_size_limit(2147483647)  rows_list = []   def replacer(txt: str) -> str:     symbols = (\"ahkbtmxcepAHKBTMXCEP\",                \"\u0430\u043d\u043a\u0432\u0442\u043c\u0445\u0441\u0435\u0440\u0410\u041d\u041a\u0412\u0422\u041c\u0425\u0421\u0415\u0420\")     tr = {ord(a): ord(b) for a, b in zip(*symbols)}     return txt.translate(tr)   def fio_normalize(fio: str, ascii_l=True) -> str:     if \"http\" in fio or \"https\" in fio or \"Http\" in fio or \"Https\" in fio:         return \"\"     if fio.startswith(\"-\") or fio.endswith(\"-\"):         fio = fio.strip(\"-\").strip()     if \"-\" in fio:         fio = fio.replace(\"-\", \"\u0442\u0438\u0440\u0440\u0435\")     fio = \"\".join(x for x in fio if x.isalpha() or x == \" \").strip().replace(\"\u0442\u0438\u0440\u0440\u0435\", \"-\")     ascii_count = 0     for xz in fio:         if xz == \" \":             ascii_count += 1         ascii_count += sum(1 for x in xz if x in string.ascii_letters)     if ascii_l and ascii_count == len(fio):         fio = translit(fio, \"ru\")     elif ascii_l:         temp = []         for x in fio:             temp.append(replacer(x)) if x in string.ascii_letters else temp.append(x)         fio = \"\".join(temp)     fio = \" \".join(x.strip().capitalize() for x in fio.split())     lst = []     for x in fio.split():         if \"-\" in x:             lst.append(\"-\".join(z.capitalize() for z in x.split(\"-\")))         else:             lst.append(x)     fio = \" \".join(lst)     if len(fio.split()) > 3:         fio = \" \".join(fio.split()[0:3])     if len(fio) > 50:         fio = fio[:51]     return fio if fio else \"\"   def email_normalize(mail: str) -> str:     return mail.strip().replace(\"\/\", \".\") if \"@\" in mail else \"\"   def phone_normalize(phone: str) -> str:     phone = \"\".join(x for x in phone if x.isdecimal())     if phone:         if len(phone) > 11:             return \"\"         elif 6 &lt;= len(phone) &lt; 10:             return phone         elif len(phone) == 10:             if phone.startswith(\"9\"):                 return f\"7{phone}\"             else:                 return phone         elif len(phone) == 11:             if phone.startswith(\"8\") and phone[1] == \"9\":                 return f\"7{phone[1:]}\"             elif phone.startswith(\"7\"):                 return phone             else:                 return \"\"         return \"\"     return \"\"   def count_get(items: list) -> bool:     cnt = 0     for item in items:         if item.strip():             cnt += 1     return True if cnt > 1 else False   def read_files(file: str, name: str, ascii_l=True) -> None:     global rows_list     with open(file, \"r\", encoding=\"utf-8\") as cs:         for nm, row in enumerate(csv.reader(cs, delimiter=\"|\")):             if nm == 0:                 rows_list.append(row)                 continue             phone, email, fio, uname = row             fio = fio_normalize(fio, ascii_l)             email = email_normalize(email)             phone = phone_normalize(phone)             uname = uname.encode().decode()             if len(uname) > 50:                 uname = \"\"             if count_get([phone, email, fio, uname]):                 rows_list.append([phone, email, fio, uname])             else:                 continue             print(f\"\\r{nm+1} | {fio} | {phone} | {email} | {uname}\", end=\"\")             if len(rows_list) == 100000:                 with open(f\"{name}_clean.csv\", mode=\"a\", encoding='utf-8', newline='') as csv_f:                     file_writer = csv.writer(csv_f, delimiter=\";\")                     file_writer.writerows(rows_list)                 rows_list.clear()   def main() -> None:     global rows_list     path = input(\"path file: >>> \")     ascii_l = input(\"ascii_l: >>> \")     if not Path(path).exists() or not path or not Path(path).is_file():         exit(0)     tm = time.monotonic()     name = Path(path).name.removesuffix(Path(path).suffix)     cnt_line = sum(1 for _ in open(path, \"rb\"))     print(f\"\\n{Path(path).name} | Lines: {cnt_line}\\n{'*' * 35}\")     if ascii_l == \"n\":         read_files(path, name, ascii_l=False)     else:         read_files(path, name, ascii_l=True)      if 0 &lt; len(rows_list) &lt; 100000:         with open(f\"{name}_clean.csv\", mode=\"a\", encoding='utf-8', newline='') as csv_f:             file_writer = csv.writer(csv_f, delimiter=\";\")             file_writer.writerows(rows_list)         rows_list.clear()      ch_time = (f'All complete | {(int(time.monotonic() - tm) \/\/ 3600) % 24:d} h. '                f'{(int(time.monotonic() - tm) \/\/ 60) % 60:02d} m. {int(time.monotonic() - tm) % 60:02d} s.')     lnt = len(ch_time)     print(f'\\n{\"-\" * lnt}\\n{ch_time}\\n{\"-\" * lnt}')   if __name__ == \"__main__\":     main()<\/code><\/pre>\n<p><strong>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c\u0443 \u00abcsv\u00bb. \u0412 \u043d\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0447\u0438\u0441\u0442\u0438\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0427\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438, \u0432\u043e\u0442 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5d\/1fc\/d11\/d5d1fcd11eaa139cec08510551782826.png\" alt=\"\u041d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432\" title=\"\u041d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432\" width=\"190\" height=\"530\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d5d\/1fc\/d11\/d5d1fcd11eaa139cec08510551782826.png\"\/><\/p>\n<div><figcaption>\u041d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435 \u2013 \u0441\u0431\u043e\u0440\u043d\u0430\u044f \u0441\u043e\u043b\u044f\u043d\u043a\u0430. \u041d\u0443 \u0438 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438  \u0438 \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u0441\u043b\u0435, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d78\/dac\/196\/d78dac196c346133b2639a96d44bac90.png\" alt=\"\u0421\u0442\u0440\u043e\u043a\u0430 \u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\" title=\"\u0421\u0442\u0440\u043e\u043a\u0430 \u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\" width=\"858\" height=\"97\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d78\/dac\/196\/d78dac196c346133b2639a96d44bac90.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u043e\u043a\u0430 \u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/761\/c66\/90d\/761c6690d9258b4793022b4f1c1c992a.png\" alt=\"\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\" title=\"\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\" width=\"685\" height=\"100\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/761\/c66\/90d\/761c6690d9258b4793022b4f1c1c992a.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0443\u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u0430\u043c\u043e\u0433\u043e python, \u0431\u0435\u0437 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430.<\/p>\n<p>\u0410 \u043d\u0430 \u044d\u0442\u043e\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0432\u0441\u0435.<br \/>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0434\u0430\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u0430!<\/p>\n<p><strong>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0441\u044f \u043d\u0430<\/strong>\u00a0<a href=\"https:\/\/t.me\/addlist\/yh61nKdSoj1mYjE6\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u0448\u0438 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u043a\u0430\u043d\u0430\u043b\u044b!<\/a><\/p>\n<p>UPD: \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 email.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/793486\/\"> https:\/\/habr.com\/ru\/articles\/793486\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/793348\/\" rel=\"noopener noreferrer nofollow\">\u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043e\u0442 \u0446\u0438\u0444\u0440 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u043e\u0447\u0438\u0449\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043e\u0442 \u0431\u0443\u043a\u0432 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 email. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041d\u0443 \u0438 \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0442\u0440\u043e\u043a \u043e\u0442 \u0431\u0443\u043a\u0432 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0443\u0434\u0430\u043b\u044f\u043b\u0438 \u0447\u0438\u0441\u043b\u0430 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430. \u0418 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u0430 \u043d\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0438 \u0441\u044b\u0440\u043e\u043c \u0432\u0438\u0434\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e phone_normalize(phone: str) -> str, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0435\u0435, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u0432\u0438\u0434\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043e\u0442 \u0441\u043a\u043e\u0431\u043e\u043a, \u043a\u0430\u0432\u044b\u0447\u0435\u043a \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0443\u0441\u0442\u043e\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0438\u0449\u0435\u043d\u0430. \u0415\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0435\u0441\u0442\u044c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u043d\u0435\u043c. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0430 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0430\u0445, \u0431\u043e\u043b\u044c\u0448\u0435 11 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 6 \u0434\u043e 10, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e,  \u0441 \u043a\u0430\u043a\u043e\u0439 \u0446\u0438\u0444\u0440\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u0432\u044f\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e 7. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043d\u043e\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u0446\u0438\u0444\u0440 11, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u0446\u0438\u0444\u0440\u0443. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 8, \u043c\u0435\u043d\u044f\u044e \u043d\u0430 7. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 8 \u043d\u0430\u0434\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0442\u043e\u0440\u0443\u044e \u0446\u0438\u0444\u0440\u0443. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0434\u0435\u0432\u044f\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0437\u0430\u043c\u0435\u043d\u0443. \u041d\u0443 \u0438 \u0435\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 7, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<pre><code class=\"python\">def email_normalize(mail: str) -> str:     if \"@\" in mail:         mail = mail.split(\"@\")         if mail[0].strip():             if \".\" in mail[1]:                 ch_mail = mail[1].split(\".\")                 if len(ch_mail) == 2:                     return \"@\".join(mail) if validators.email(\"@\".join(mail)) else \"\"             else:                 for char in \",:;!_*-+()\/#%&amp;\":                     if char in mail[1]:                         ch_mail = mail[1].replace(char, \".\")                         if len(ch_mail.split(\".\")) == 2:                             mail = \"@\".join([mail[0], ch_mail])                             return mail if validators.email(mail) else \"\"         return \"\"       return \"\"<\/code><\/pre>\n<h3>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 email<\/h3>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u043e\u0431\u0430\u043a\u0438. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u044b\u043b\u043e\u043c. \u041d\u0435\u0442, \u0442\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0443 \u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0447\u043a\u0438. \u041f\u043e\u0442\u043e\u043c\u0443, \u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445 \u043d\u0430 \u043d\u0435\u0435.<\/p>\n<pre><code class=\"python\">def email_normalize(mail: str) -> str:     return mail.strip().replace(\"\/\", \".\") if \"@\" in mail else \"\"<\/code><\/pre>\n<h3>\u041f\u043e\u0434\u0441\u0447\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u043a<\/h3>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0438 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0432\u0430\u043c \u0445\u043e\u0447\u0443 \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0441\u043f\u0438\u0441\u043a\u0435. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0435, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a. \u0417\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u043e\u043b\u044c\u0448\u0435 1, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c True, \u043c\u0435\u043d\u044c\u0448\u0435 False.<\/p>\n<pre><code class=\"python\">def count_get(items: list) -> bool:     cnt = 0     for item in items:         if item.strip():             cnt += 1     return True if cnt > 1 else False<\/code><\/pre>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0444\u0430\u0439\u043b\u0430 \u00abcsv\u00bb<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0444\u0430\u0439\u043b \u00ab.csv\u00bb \u0438 \u043e\u0431\u0447\u0438\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0438\u0445. \u041d\u0443 \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b \u0444\u0430\u0439\u043b, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0438 \u043e\u0447\u0438\u0449\u0430\u043b.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e read_files(file: str, name: str, ascii_l=True) -> None. \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u00ab.csv\u00bb \u0444\u0430\u0439\u043b\u0443, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u043e\u0447\u0438\u0449\u0435\u043d\u043d\u043e\u0435 \u043e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ascii_l \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041e\u043d \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412\u0435\u0434\u044c \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e-\u0440\u0443\u0441\u0441\u043a\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b \u00ab.csv\u00bb. \u0412 \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c. \u0412 \u043c\u043e\u0435\u043c \u0444\u0430\u0439\u043b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab|\u00bb. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0437\u0430\u043f\u044f\u0442\u0430\u044f \u0438\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0445. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0423 \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438. \u041f\u043e\u0442\u043e\u043c\u0443 \u0438\u0445 \u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439, \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e, \u0442\u043e \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0422\u0430\u043a, \u0441\u043a\u0430\u0436\u0435\u043c, \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0432\u0438\u0434\u0443 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u042d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u041a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043d\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0438\u043c \u0441 \u0432\u0430\u043c\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443. \u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0424.\u0418.\u041e., email, \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a rows_list. \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0443\u0447\u043d\u043e.<\/p>\n<pre><code class=\"python\">def read_files(file: str, name: str, ascii_l=True) -> None:     global rows_list     with open(file, \"r\", encoding=\"utf-8\") as cs:         for nm, row in enumerate(csv.reader(cs, delimiter=\"|\")):             if nm == 0:                 rows_list.append(row)                 continue             phone, email, fio, uname = row             fio = fio_normalize(fio, ascii_l)             email = email_normalize(email)             phone = phone_normalize(phone)             uname = uname.encode().decode()             if len(uname) > 50:                 uname = \"\"             if count_get([phone, email, fio, uname]):                 rows_list.append([phone, email, fio, uname])             else:                 continue             print(f\"\\r{nm+1} | {fio} | {phone} | {email} | {uname}\", end=\"\")             if len(rows_list) == 100000:                 with open(f\"{name}_clean.csv\", mode=\"a\", encoding='utf-8', newline='') as csv_f:                     file_writer = csv.writer(csv_f, delimiter=\";\")                     file_writer.writerows(rows_list)                 rows_list.clear()<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043b\u0443\u0447\u0448\u0435 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c. \u041f\u043e\u0442\u043e\u043c\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0440\u0430\u0432\u043d\u043e 100 000, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0444\u0430\u0439\u043b. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u0440\u0446\u0438\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0440\u043e\u0441 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443. \u0424\u0443\u043d\u043a\u0446\u0438\u044f main<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0435\u043c\u0441\u044f \u043a \u0444\u0438\u043d\u0430\u043b\u0443 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e main. \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u0440\u043e\u0434\u0435 \u0434\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430 \u0443\u0436\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0410 \u043d\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u0432\u0432\u043e\u0434\u0443 \u00abn\u00bb. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0444\u0430\u0439\u043b, \u0438 \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0444\u0430\u0439\u043b. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d \u00ab.csv\u00bb \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u2013 \u0434\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u0417\u0430\u043c\u0435\u0440\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p> \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u0444\u0430\u0439\u043b\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u0438\u043c\u044f \u0438 \u043a\u043e\u043b-\u0432\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e. \u041d\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0447\u0438\u0441\u0442\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u043f\u0443\u0441\u0442 \u043b\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u00ab.csv\u00bb. \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<pre><code class=\"python\">def main() -> None:     global rows_list     path = input(\"path file: >>> \")     ascii_l = input(\"ascii_l: >>> \")     if not Path(path).exists() or not path or not Path(path).is_file():         exit(0)     tm = time.monotonic()     name = Path(path).name.removesuffix(Path(path).suffix)     cnt_line = sum(1 for _ in open(path, \"rb\"))     print(f\"\\n{Path(path).name} | Lines: {cnt_line}\\n{'*' * 35}\")     if ascii_l == \"n\":         read_files(path, name, ascii_l=False)     else:         read_files(path, name, ascii_l=True)      if 0 &lt; len(rows_list) &lt; 100000:         with open(f\"{name}_clean.csv\", mode=\"a\", encoding='utf-8', newline='') as csv_f:             file_writer = csv.writer(csv_f, delimiter=\";\")             file_writer.writerows(rows_list)         rows_list.clear()      ch_time = (f'All complete | {(int(time.monotonic() - tm) \/\/ 3600) % 24:d} h. '                f'{(int(time.monotonic() - tm) \/\/ 60) % 60:02d} m. {int(time.monotonic() - tm) % 60:02d} s.')     lnt = len(ch_time)     print(f'\\n{\"-\" * lnt}\\n{ch_time}\\n{\"-\" * lnt}')   if __name__ == \"__main__\":     main()<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0438 \u0432\u0441\u0435. \u041d\u0438\u0436\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430:<\/p>\n<pre><code class=\"python\">\"\"\" pip install transliterate \"\"\" import csv import string import time from pathlib import Path  import validators from transliterate import translit  from transliterate import translit  csv.field_size_limit(2147483647)  rows_list = []   def replacer(txt: str) -> str:     symbols = (\"ahkbtmxcepAHKBTMXCEP\",                \"\u0430\u043d\u043a\u0432\u0442\u043c\u0445\u0441\u0435\u0440\u0410\u041d\u041a\u0412\u0422\u041c\u0425\u0421\u0415\u0420\")     tr = {ord(a): ord(b) for a, b in zip(*symbols)}     return txt.translate(tr)   def fio_normalize(fio: str, ascii_l=True) -> str:     if \"http\" in fio or \"https\" in fio or \"Http\" in fio or \"Https\" in fio:         return \"\"     if fio.startswith(\"-\") or fio.endswith(\"-\"):         fio = fio.strip(\"-\").strip()     if \"-\" in fio:         fio = fio.replace(\"-\", \"\u0442\u0438\u0440\u0440\u0435\")     fio = \"\".join(x for x in fio if x.isalpha() or x == \" \").strip().replace(\"\u0442\u0438\u0440\u0440\u0435\", \"-\")     ascii_count = 0     for xz in fio:         if xz == \" \":             ascii_count += 1         ascii_count += sum(1 for x in xz if x in string.ascii_letters)     if ascii_l and ascii_count == len(fio):         fio = translit(fio, \"ru\")     elif ascii_l:         temp = []         for x in fio:             temp.append(replacer(x)) if x in string.ascii_letters else temp.append(x)         fio = \"\".join(temp)     fio = \" \".join(x.strip().capitalize() for x in fio.split())     lst = []     for x in fio.split():         if \"-\" in x:             lst.append(\"-\".join(z.capitalize() for z in x.split(\"-\")))         else:         <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-368115","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=368115"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368115\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=368115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=368115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=368115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}