python 基于wx实现音乐播放


Posted in Python onNovember 24, 2020
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 25 18:15:36 2020

@author: Administrator
"""
import requests
import binascii
import json
import datetime
import traceback
from Crypto.Cipher import AES
from tkinter import *

FAKE_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', # noqa
  'Accept-Charset': 'UTF-8,*;q=0.5',
  'Accept-Encoding': 'gzip,deflate,sdch',
  'Accept-Language': 'en-US,en;q=0.8',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0', # noqa
  'referer': 'https://www.google.com'
}
def netease_search(keyword) -> list:
  ''' 从网易云音乐搜索 '''
  count = 30
  eparams = {
    'method': 'POST',
    'url': 'http://music.163.com/api/cloudsearch/pc',
    'params': {
      's': keyword,
      'type': 1,
      'offset': 0,
      'limit': count
    }
  }
  data = {'eparams': encode_netease_data(eparams)}

  s = requests.Session()
  s.headers.update(FAKE_HEADERS)
  s.headers.update({
    'referer': 'http://music.163.com/',
  })
 

  r = s.post('http://music.163.com/api/linux/forward', data=data)

  
  j = r.json()


  music_list = []
  ID=0
  try:
    for m in j['result']['songs']:
      if m['privilege']['fl'] == 0:
        # 没有版权
        continue
      # 获得歌手名字
      singers = []
      for singer in m['ar']:
        singers.append(singer['name'])
      # 获得最优音质的文件大小
      if m['privilege']['fl'] >= 320000 and 'h' in m.keys() and m['h']:
        # 有时候即使>=320000,h属性依然为None
        size = m['h']['size']
      elif m['privilege']['fl'] >= 192000 and 'm' in m.keys() and m['m']:
        size = m['m']['size']
      else:
        size = m['l']['size']

      music = {
        'title': m['name'],
        'id': m['id'],
        'duration': str(datetime.timedelta(seconds=int(m['dt']/1000))),
        'singer': '、'.join(singers),
        'album': m['al']['name'],
        'size': round(size / 1048576, 2),
        'source': 'netease'
      }
      music=[]
      print(m['name'])
      music.append(ID)
      music.append(m['name'])
      music.append('、'.join(singers))
      href="http://music.163.com/song/media/outer/url?id=" rel="external nofollow" +str(m['id'])+".mp3"
      print(href)
      music.append(href)
      music.append(m['id'])
      music_list.append(music)
      ID=ID+1
      
  except Exception:
    # 如果是详细模式则输出详细错误信息
#    err = traceback.format_exc() if glovar.get_option('verbose') else str(e)
#    raise DataError(err)
    
    pass

  return music_list





def encode_netease_data(data) -> str:
  data = json.dumps(data)
  key = binascii.unhexlify('7246674226682325323F5E6544673A51')
  encryptor = AES.new(key, AES.MODE_ECB)
  # 补足data长度,使其是16的倍数
  pad = 16 - len(data) % 16
  fix = chr(pad) * pad
  byte_data = (data + fix).encode('utf-8')
  return binascii.hexlify(encryptor.encrypt(byte_data)).upper().decode()

def QQ_search(keyword):
  import urllib.parse as parse
  from urllib.request import urlretrieve
  import requests
  import json
  import os
  import time
  import sys
  w=parse.urlencode({'w':keyword})
  
 
  url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=63229658163010696&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=30&%s&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'%(w)
   
  content=requests.get(url=url)
   
  str_1=content.text
   
  dict_1=json.loads(str_1)
   
  song_list=dict_1['data']['song']['list']
   
  str_3='''https://u.y.qq.com/cgi-bin/musicu.fcg?-=getplaysongvkey5559460738919986&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"1825194589","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"1825194589","songmid":["%s"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}'''
   
  
  ID=0
  music_list=[]
  url_list=[]
  for i in range(len(song_list)):
    
#    music_name.append(song_list[i]['name']+'-'+song_list[i]['singer'][0]['name'])
   
  #  print('{}.{}-{}'.format(i+1,song_list[i]['name'],song_list[i]['singer'][0]['name']))
    url_list.append(str_3 % (song_list[i]['mid']))
  #  
#    print(url_list[id-1])


    music=[]
#    print(m['songname'])
    music.append(ID)
    music.append(song_list[i]['name'])
    music.append(song_list[i]['singer'][0]['name'])
    content_json=requests.get(url=url_list[ID])
 
    dict_2=json.loads(content_json.text)
     
    url_ip=dict_2['req']['data']['freeflowsip'][1]
     
    purl=dict_2['req_0']['data']['midurlinfo'][0]['purl']
     
    href=url_ip+purl
    music.append(href)
    music.append(song_list[i]['mid'])
    music_list.append(music)
    ID=ID+1

    

  return music_list

import wx 
import time



  

def music_play(arr):
  print("双击函数已启动")
#  必须加上全局变量,否则不唱歌
  
  global mp3
  import mp3play
  path="http://m10.music.126.net/20200414222927/e509cfbb086d358e701e6bb5cfedfeaa/ymusic/0759/030f/540b/039ace5c004ebd382de4ca163145cf9b.mp3"
  path=arr[3]
  print("path:-->"+path)
  mp3 = mp3play.load(path)
  mp3.play()
def music_pyplay(arr):
  import os
  import time
  import pygame
  
  source_file_path=arr[3]
  pygame.mixer.init()
  pygame.mixer.music.load(source_file_path)
  pygame.mixer.music.set_volume(0.5) 
  pygame.mixer.music.play(-1)
  
  
class MyFrame(wx.Frame): 
  def __init__(self): 
    wx.Frame.__init__(self, None, -1, 'Button Example',  
        size=(1300, 700),pos=(-10,0)) 
    panel = wx.Panel(self, -1) 
    panel.SetSize(1300,700)
    panel.SetBackgroundColour("#D2B48C")
    
    
    
    
    self.sousuotxt = wx.TextCtrl(panel,pos=(0,0),size = (100,30)) 
    lblList = ['网易', 'QQ', '酷狗'] 
     
    self.rbox = wx.RadioBox(panel, label = '', pos = (100,-15),size = (100,30), choices = lblList,majorDimension = 1, style = wx.RA_SPECIFY_ROWS) 
    self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox) 
    
    self.button = wx.Button(panel, -1, "搜索", pos=(350, 0)) 
    self.Bind(wx.EVT_BUTTON, self.OnClick, self.button) 
    
    self.mylove = wx.Button(panel, -1, "同步我喜欢的音乐", pos=(500, 0)) 
    self.Bind(wx.EVT_BUTTON, self.Dmylove, self.mylove) 
    
    
    languages = [] 
    for i in range(1000):
      languages.append(str(i))
    
    self.choice = wx.Choice(panel,choices = languages,pos=(0,30))
    self.choice.SetStringSelection("0")
    
    
    self.button5 = wx.Button(panel, -1, "本地文件", pos=(50, 30)) 
    self.Bind(wx.EVT_BUTTON, self.OnButton, self.button5) 
    
    self.button1 = wx.Button(panel, -1, "播放", pos=(150, 30)) 
    self.Bind(wx.EVT_BUTTON, self.OnClick1, self.button1) 
    
    self.button2 = wx.Button(panel, -1, "暂停", pos=(250, 30)) 
    self.Bind(wx.EVT_BUTTON, self.OnClick2, self.button2) 
    
    self.button3 = wx.Button(panel, -1, "下载", pos=(350, 30)) 
    self.Bind(wx.EVT_BUTTON, self.OnClick3, self.button3) 
    
    
    font = wx.Font(15, wx.DEFAULT, wx.FONTSTYLE_NORMAL, wx.NORMAL) 

    self.music_ID = wx.StaticText(panel, label = "ID", pos = (0,100),size=(30,500),style=wx.ALIGN_CENTER) 
    self.music_ID.SetBackgroundColour("#D2B48C")
    self.music_ID.SetFont(font)

    self.music_name = wx.StaticText(panel, label = "歌名", pos = (30,100),size=(400,500),style=wx.ALIGN_CENTER) 
    self.music_name.SetBackgroundColour("#D2B48C")
    self.music_name.SetFont(font)                  
    
            
    
    
    languages = [] 
    for i in range(1,100):
      languages.append("第"+str(i)+"页")
    
    self.pagenum = wx.Choice(panel,choices = languages,pos=(50,600)) 
    self.pagenum.SetStringSelection("第1页")
    self.button4 = wx.Button(panel, -1, "跳转", pos=(150, 600)) 
    self.Bind(wx.EVT_BUTTON, self.OnClick4, self.button4) 
    
    self.prepage = wx.Button(panel, -1, "上一页", pos=(250, 600)) 
    self.Bind(wx.EVT_BUTTON, self.PrePage, self.prepage) 
    
    self.nextpage = wx.Button(panel, -1, "下一页", pos=(350, 600)) 
    self.Bind(wx.EVT_BUTTON, self.NextPage, self.nextpage) 
    
    
    
    
    self.path="D://downmusic/歌曲"
    self.music_arr=[]
    
    self.getfile()
    self.setData()
    
    
    self.key1="本地音乐"
  def onRadioBox(self,event):
    
#   print (self.rbox.GetStringSelection(),' is clicked from Radio Box' )
    
    pass
  def OnClick(self, event): 
    self.rbox.GetStringSelection()
    print(self.rbox.GetStringSelection())
    rboxtext=self.rbox.GetStringSelection()
    if rboxtext=="网易":
      s=self.sousuotxt.GetValue()
      self.music_arr=netease_search(s)
      print(self.music_arr)
      self.setData()
      print("搜索")
      self.key1="在线音乐"
    elif rboxtext=="QQ":
      s=self.sousuotxt.GetValue()
      self.music_arr=QQ_search(s)
      print(self.music_arr)
      self.setData()
      print("搜索")
      self.key1="在线音乐"
    else:
      pass
    
    
      
      
      
    
      
      
    
    
  
    
    
    
#播放
  def OnClick1(self, event): 
#    self.button1.SetLabel("Clicked") 
    print("播放")
    
    y=self.choice.GetStringSelection()
    for i in self.music_arr:
      if y==str(i[0]):
        if self.key1=="在线音乐":
        
          music_play(i)
          
        else:
          self.music_pyplay(i)
          
          
  def music_pyplay(self,arr):
    import os
    import time
    import pygame
    
    source_file_path=arr[3]
    pygame.mixer.init()
    pygame.mixer.music.load(source_file_path)
    pygame.mixer.music.set_volume(0.5) 
    pygame.mixer.music.play(-1)
    
    import os
    path="D://downmusic/歌词/"    
    import pygame
    import time
    import os
    f_url=""
    if arr[2]=="sen":
      
      f_url=path+str(arr[1])+".lrc"
    else:
      f_url=path+str(arr[1])+"-"+str(arr[2])+".lrc"
    
      
    f=open(f_url)
    s=""
    for i in f.readlines():
      if i[1]!="0":
        pass
      else:
        s=s+i
      
    print(s)
    f.close()
    strLrc=s
    
    f.close()
    dictLrc = {}
    # 对歌词进行按行切割
    lineListLrc = strLrc.splitlines()
    # 遍历每一行歌词
    geci=""
    for lineLrc in lineListLrc:
      # 时间和歌词分开
      listLrc = lineLrc.split("]")
      timeLrc = listLrc[0][1:].split(':')
      # 转换时间格式
      times = float(timeLrc[0]) * 60 + float(timeLrc[1])
      # 把时间当做key,歌词当做value存放在字典中
      dictLrc[times] = listLrc[1]
      geci=geci+listLrc[1]+"\n"
    tempTime = 0
    # 音频初始化
    
    
    root = Tk() # 初始化Tk()
    root.overrideredirect(True)#隐藏标题栏
    root.title("label-test")  # 设置窗口标题
    root.geometry("1300x800+0+0")  # 设置窗口大小 注意:是x 不是*
    root.resizable(width=True, height=True) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
    l = Label(root, text="label", bg="pink", font=("Arial",60), width=300, height=800)
    l["text"]="wusen"
    
    # 加载音频文件路径 (路径必须真实存在,音频文件格式支持mp3/ogg等格式)
    for key in dictLrc.keys():
      tempTime = key - tempTime
      # 判断是否在播放音乐
      if not pygame.mixer.music.get_busy():
        pygame.mixer.music.play()
      # 歌词显示的时间
      time.sleep(tempTime)
      # 显示歌词
      print(dictLrc[key])
      
      tempTime = key
      import time
    #  time.sleep(1)
    #  music_IRC.SetLabel(time.strftime("%H:%M:%S",time.localtime(time.time())))  
      print(time.strftime("%H:%M:%S",time.localtime(time.time())))
#      l["text"]=time.strftime("%H:%M:%S",time.localtime(time.time()))
      l["text"]=dictLrc[key]
      
      l.pack(side=TOP)
      l.update()
    root.destroy()
#    print(s)
  
#    暂停     
  def OnClick2(self, event): 
#    self.button2.SetLabel("Clicked") 
    print("暂停")
#    下载
  def OnClick3(self, event): 
    
    y=self.choice.GetStringSelection()
#    self.button3.SetLabel("Clicked") 
    print("下载")
    print(y)
    
    for i in self.music_arr:
      if y==str(i[0]):
        self.down_music(i)
#    跳转
  def down_music(self,arr):
  
    self.rbox.GetStringSelection()
    print(self.rbox.GetStringSelection())
    rboxtext=self.rbox.GetStringSelection()
    if rboxtext=="网易":
      headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
  
      import requests
      url=arr[3]
      name=str(arr[1])+"-"+str(arr[2])
      res=requests.get(url,headers=headers)
      print(res)
      m=res.content
      mv=open("D://downmusic/歌曲/"+name+".mp3","wb")
      mv.write(m)
      mv.close()
      #  下载歌词
      import requests
      import json
      import os
      url = 'http://music.163.com/api/song/lyric?'+ 'id=' + str(arr[4])+ '&lv=1&kv=1&tv=-1'
      r = requests.get(url,headers=headers)
      json_obj = r.text
      print(r.text)
      print(url)
      j = json.loads(json_obj)
      print(j['lrc']['lyric'])
      f=open("D://downmusic/歌词/"+name+".lrc","w")
      f.write(j['lrc']['lyric'])
      f.close()
    elif rboxtext=="QQ":
      headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
  
      import requests
      url=arr[3]
      name=str(arr[1])+"-"+str(arr[2])
      res=requests.get(url,headers=headers)
      print(res)
      m=res.content
      QQmusicpath="D://downmusic/歌曲/"+name+".mp3"
      mv=open(QQmusicpath,"wb")
      mv.write(m)
      mv.close()
        
        
        
      import os
      s="e://python/ffmpeg-20200403-52523b6-win64-static/bin/ffmpeg -i D://downmusic/歌曲/a.mp3 "+QQmusicpath
      os.system(s)
      os.remove("D://downmusic/歌曲/a.mp3")
      #  下载歌词
      pass
    else:
      pass
  def OnClick4(self, event): 
      
    self.setData()
    
  
    
#刷新页面赋值内容
  def setData(self):
    y=self.pagenum.GetStringSelection()
#    self.button4.SetLabel("Clicked") 
    print("跳转")
    print(y)
    ID=""
    name=""
    singer=""
    
    for i in self.music_arr[(int(y[1:-1])-1)*10:(int(y[1:-1])-1)*10+10]:
      ID=ID+str(i[0])+"\n"+"----\n"
      name=name+str(i[1])+"-"+str(i[2])+"\n"+"------------------------------------------------------------------------------------------\n"
#      singer=singer+str(i[2])+"\n"+"----------\n"
      
    self.music_ID.SetLabel(ID)
    self.music_name.SetLabel(name)
#    self.music_singer.SetLabel(singer)

  def getfile(self):
    self.music_arr.clear()
    import os
    
    local_url=self.path+"/"
  
    if os.path.isdir(local_url):
      pass
    else:
      os.mkdir(local_url)
      print("路径已创建")
    file = os.listdir(self.path)
    
    j=0
    for i in file:
      
      k=[]
      music_name=i[:-4].split("-", 1)[0]
      try:
        
        music_singer=i[:-4].split("-", 1)[1]
      except:
        music_singer="sen"
      music_ID="0"
      music_edition="本地歌曲"
      music_url=self.path+"/"+i
      k.append(j)
      k.append(music_name)
      k.append(music_singer)
      k.append(music_url)
      k.append(music_edition)
      print(j)
      print(music_name)
      print(music_singer)
      print(music_url)
      print(music_edition)
      print("----------")
      self.music_arr.append(k)
      j=j+1
    self.key1="本地音乐"
#    选择本地文件
  def OnButton(self, event):
    """"""
    dlg = wx.DirDialog(self,u"选择文件夹",style=wx.DD_DEFAULT_STYLE)
    if dlg.ShowModal() == wx.ID_OK:
      print(dlg.GetPath()) #文件夹路径
      self.path=dlg.GetPath()
    dlg.Destroy()
    
    self.getfile()
    self.setData()
#    下一页
  def NextPage(self,event):
    y=self.pagenum.GetStringSelection()
    self.pagenum.SetStringSelection("第"+str(int(y[1:-1])+1)+"页")
    self.setData()
#    上一页
  def PrePage(self,event):
    y=self.pagenum.GetStringSelection()
    self.pagenum.SetStringSelection("第"+str(int(y[1:-1])-1)+"页")
    self.setData()
    
    
  def Dmylove(self,event):
#    同步网易云音乐
    
    import requests
    from bs4 import BeautifulSoup
    import urllib.request
    from lxml import html
    etree = html.etree
    #这里是设置请求头
    headers = {
      'Referer': 'http://music.163.com/',
      'Host': 'music.163.com',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    }
     
    # 歌单的url地址这里改id
    play_url = 'http://music.163.com/playlist?id=587771511'
    s = requests.session()
    response = s.get(play_url, headers=headers).content
    # 使用bs4匹配出对应的歌曲名称和地址
    s = BeautifulSoup(response, 'lxml')
    main = s.find('ul', {'class': 'f-hide'})
    #print(main.find_all('a'))
    lists = []
    for music in main.find_all('a'):
      list = []
      # print('{} : {}'.format(music.text, music['href']))
      musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3'
      musicName = music.text
      # 单首歌曲的名字和地址放在list列表中
      list.append(musicName)
      list.append(musicUrl)
      
      list.append(music['href'][9:])
      # 全部歌曲信息放在lists列表中
      lists.append(list)
    # 下载列表中的全部歌曲,并以歌曲名命名下载后的文件,文件位置为当前文件夹
    for i in lists:
      url = i[1]
      name = i[0]
      try:
        import os
        if os.path.exists("d:/downmusic/歌曲/"+name+".mp3"):
          pass
        else:
          
        
          print('正在下载', name)
          #这里修改路径,随便指定盘符,但是得存在
          urllib.request.urlretrieve(url, 'd:/downmusic/歌曲/%s.mp3' % name)
          import requests
          import json
          
          
          url = 'http://music.163.com/api/song/lyric?'+ 'id=' + str(i[2])+ '&lv=1&kv=1&tv=-1'
          r = requests.get(url,headers=headers)
          json_obj = r.text
          print(r.text)
          print(url)
          j = json.loads(json_obj)
          print(j['lrc']['lyric'])
          f=open("d://downmusic/歌词/"+name+".lrc","w")
          f.write(j['lrc']['lyric'])
          f.close()
          print('下载成功')
      except:
        print('下载失败')
if __name__ == '__main__': 
  app = wx.PySimpleApp() 
  frame = MyFrame() 
  
  frame.Show() 
  
  
  app.MainLoop() 
  
  
  
  
  

  

  
  

#
#pyinstaller -D -w WX音乐播放器.py -p D:/anaconda/Lib/site-packages
#  pyinstaller -D WX音乐播放器.py -p D:/anaconda/Lib/site-packages
#  
#pyinstaller -D WX音乐播放器.py

以上就是python 基于wx实现音乐播放的详细内容,更多关于python 音乐播放的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中str is not callable问题详解及解决办法
Feb 10 Python
Python中matplotlib中文乱码解决办法
May 12 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
使用Python将Mysql的查询数据导出到文件的方法
Feb 25 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python中数字是否为可变类型
Jul 08 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Django用户认证系统如何实现自定义
Nov 12 Python
Python办公自动化之Excel(中)
May 24 Python
python基础之错误和异常处理
Oct 24 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 #Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 #Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 #Python
python爬虫快速响应服务器的做法
Nov 24 #Python
PyCharm Community安装与配置的详细教程
Nov 24 #Python
python3爬虫GIL修改多线程实例讲解
Nov 24 #Python
Django URL参数Template反向解析
Nov 24 #Python
You might like
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
给ECShop添加最新评论
2015/01/07 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
xml转json的js代码
2012/08/28 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
jupyter notebook清除输出方式
2020/04/10 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
通过cmd进入python的步骤
2020/06/16 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
python中re模块知识点总结
2021/01/17 Python
中学生秋季运动会广播稿
2014/09/21 职场文书
初中生毕业评语
2014/12/29 职场文书
水电施工员岗位职责
2015/04/11 职场文书
起诉书格式范文
2015/05/20 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
python多线程方法详解
2022/01/18 Python
python中对列表的删除和添加方法详解
2022/02/24 Python
Go web入门Go pongo2模板引擎
2022/05/20 Golang
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers