# Module: data_processing # 并行计算前的预处理,把参数分成多份 def preprocess_for_parallel_calculations(parameter_array_all, cpus=1, task_index=0): import numpy as np num_all = np.array(parameter_array_all).shape[0] if num_all%cpus == 0: num_parameter = int(num_all/cpus) parameter_array = parameter_array_all[task_index*num_parameter:(task_index+1)*num_parameter] else: num_parameter = int(num_all/(cpus-1)) if task_index != cpus-1: parameter_array = parameter_array_all[task_index*num_parameter:(task_index+1)*num_parameter] else: parameter_array = parameter_array_all[task_index*num_parameter:num_all] import guan guan.statistics_of_guan_package() return parameter_array # 在一组数据中找到数值相近的数 def find_close_values_in_one_array(array, precision=1e-2): new_array = [] i0 = 0 for a1 in array: j0 = 0 for a2 in array: if j0>i0 and abs(a1-a2)

', html, re.S) if random_on==1: random.shuffle(contents) if reverse==1: contents.reverse() for content in contents: soup2 = BeautifulSoup(content, features='lxml') all_h2 = soup2.find_all('h2') for h2 in all_h2: if re.search('\d*. ', h2.get_text()): word = re.findall('[a-zA-Z].*', h2.get_text(), re.S)[0] exist = os.path.exists(directory+word+'.mp3') if not exist: try: if re.search(word, html_file): r = requests.get("https://file.guanjihuan.com/words/"+directory+word+".mp3", stream=True) with open(directory+word+'.mp3', 'wb') as f: for chunk in r.iter_content(chunk_size=32): f.write(chunk) except: pass print(h2.get_text()) try: pygame.mixer.init() track = pygame.mixer.music.load(directory+word+'.mp3') pygame.mixer.music.play() if show_link==1: print('https://www.ldoceonline.com/dictionary/'+word) except: pass translation = re.findall('

.*?

', content, re.S)[0][3:-4] if show_translation==1: time.sleep(translation_time) print(translation) time.sleep(rest_time) pygame.mixer.music.stop() print() import guan guan.statistics_of_guan_package() # 播放挑选过后的学术单词 def play_selected_academic_words(reverse=0, random_on=0, bre_or_ame='ame', show_link=1, rest_time=3): from bs4 import BeautifulSoup import re import urllib.request import requests import os import pygame import time import ssl import random ssl._create_default_https_context = ssl._create_unverified_context html = urllib.request.urlopen("https://www.guanjihuan.com/archives/24732").read().decode('utf-8') if bre_or_ame == 'ame': directory = 'words_mp3_ameProns/' elif bre_or_ame == 'bre': directory = 'words_mp3_breProns/' exist_directory = os.path.exists(directory) html_file = urllib.request.urlopen("https://file.guanjihuan.com/words/"+directory).read().decode('utf-8') if exist_directory == 0: os.makedirs(directory) soup = BeautifulSoup(html, features='lxml') contents = re.findall('
  • \d.*?
  • ', html, re.S) if random_on==1: random.shuffle(contents) if reverse==1: contents.reverse() for content in contents: soup2 = BeautifulSoup(content, features='lxml') all_li = soup2.find_all('li') for li in all_li: if re.search('\d*. ', li.get_text()): word = re.findall('\s[a-zA-Z].*?\s', li.get_text(), re.S)[0][1:-1] exist = os.path.exists(directory+word+'.mp3') if not exist: try: if re.search(word, html_file): r = requests.get("https://file.guanjihuan.com/words/"+directory+word+".mp3", stream=True) with open(directory+word+'.mp3', 'wb') as f: for chunk in r.iter_content(chunk_size=32): f.write(chunk) except: pass print(li.get_text()) try: pygame.mixer.init() track = pygame.mixer.music.load(directory+word+'.mp3') pygame.mixer.music.play() if show_link==1: print('https://www.ldoceonline.com/dictionary/'+word) except: pass time.sleep(rest_time) pygame.mixer.music.stop() print() import guan guan.statistics_of_guan_package() # 播放元素周期表上的单词 def play_element_words(random_on=0, show_translation=1, show_link=1, translation_time=2, rest_time=1): from bs4 import BeautifulSoup import re import urllib.request import requests import os import pygame import time import ssl import random ssl._create_default_https_context = ssl._create_unverified_context html = urllib.request.urlopen("https://www.guanjihuan.com/archives/10897").read().decode('utf-8') directory = 'prons/' exist_directory = os.path.exists(directory) html_file = urllib.request.urlopen("https://file.guanjihuan.com/words/periodic_table_of_elements/"+directory).read().decode('utf-8') if exist_directory == 0: os.makedirs(directory) soup = BeautifulSoup(html, features='lxml') contents = re.findall('

    ', html, re.S) if random_on==1: random.shuffle(contents) for content in contents: soup2 = BeautifulSoup(content, features='lxml') all_h2 = soup2.find_all('h2') for h2 in all_h2: if re.search('\d*. ', h2.get_text()): word = re.findall('[a-zA-Z].* \(', h2.get_text(), re.S)[0][:-2] exist = os.path.exists(directory+word+'.mp3') if not exist: try: if re.search(word, html_file): r = requests.get("https://file.guanjihuan.com/words/periodic_table_of_elements/prons/"+word+".mp3", stream=True) with open(directory+word+'.mp3', 'wb') as f: for chunk in r.iter_content(chunk_size=32): f.write(chunk) except: pass print(h2.get_text()) try: pygame.mixer.init() track = pygame.mixer.music.load(directory+word+'.mp3') pygame.mixer.music.play() if show_link==1: print('https://www.merriam-webster.com/dictionary/'+word) except: pass translation = re.findall('

    .*?

    ', content, re.S)[0][3:-4] if show_translation==1: time.sleep(translation_time) print(translation) time.sleep(rest_time) pygame.mixer.music.stop() print() import guan guan.statistics_of_guan_package() # 获取Guan软件包当前模块的所有函数名 def get_all_function_names_in_current_module(): import inspect current_module = inspect.getmodule(inspect.currentframe()) function_names = [name for name, obj in inspect.getmembers(current_module) if inspect.isfunction(obj)] import guan guan.statistics_of_guan_package() return function_names # 统计Guan软件包中的函数数量 def count_functions_in_current_module(): import guan function_names = guan.get_all_function_names_in_current_module() num_functions = len(function_names) guan.statistics_of_guan_package() return num_functions # 获取当前函数名 def get_current_function_name(): import inspect current_function_name = inspect.currentframe().f_code.co_name import guan guan.statistics_of_guan_package() return current_function_name # 获取调用本函数的函数名 def get_calling_function_name(layer=1): import inspect caller = inspect.stack()[layer] calling_function_name = caller.function return calling_function_name # 获取当前日期字符串 def get_date(bar=True): import datetime datetime_date = str(datetime.date.today()) if bar==False: datetime_date = datetime_date.replace('-', '') return datetime_date # 获取当前时间字符串 def get_time(): import datetime datetime_time = datetime.datetime.now().strftime('%H:%M:%S') return datetime_time # 获取MAC地址 def get_mac_address(): import uuid mac_address = uuid.UUID(int=uuid.getnode()).hex[-12:].upper() mac_address = '-'.join([mac_address[i:i+2] for i in range(0, 11, 2)]) return mac_address # Guan软件包的使用统计(不涉及到用户的个人数据) def statistics_of_guan_package(): try: import guan message_calling = guan.get_calling_function_name(layer=3) if message_calling == '': import socket datetime_date = guan.get_date() datetime_time = guan.get_time() current_version = guan.get_current_version('guan') client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.settimeout(0.5) client_socket.connect(('py.guanjihuan.com', 12345)) mac_address = guan.get_mac_address() message = guan.get_calling_function_name(layer=2) send_message = datetime_date + ' ' + datetime_time + ' version_'+current_version + ' MAC_address: '+mac_address+' guan.' + message+'\n' client_socket.send(send_message.encode()) client_socket.close() except: pass # 获取Python软件包的最新版本 def get_latest_version(package_name='guan', timeout=0.5): import requests url = f"https://pypi.org/pypi/{package_name}/json" try: response = requests.get(url, timeout=timeout) except: return None if response.status_code == 200: data = response.json() latest_version = data["info"]["version"] return latest_version else: return None # 获取软件包的本机版本 def get_current_version(package_name='guan'): import importlib.metadata try: current_version = importlib.metadata.version(package_name) return current_version except: return None # Guan软件包升级提示 def notification_of_upgrade(timeout=0.5): try: import guan latest_version = guan.get_latest_version(package_name='guan', timeout=timeout) current_version = guan.get_current_version('guan') if latest_version != None and current_version != None: if latest_version != current_version: print('提示:您当前使用的版本是 guan-'+current_version+',目前已经有最新版本 guan-'+latest_version+'。您可以通过以下命令对软件包进行升级:pip install --upgrade guan') except: pass