一行代码将任何Python 程序转换为图形界面(GUI)应用程序

Gooey项目支持用一行代码将(几乎)任何Python 2或3控制台程序转换为GUI应用程序。

1.快速开始

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

安装说明

(方式一)安装Gooey的最简单方法是通过 pip

pip install Gooey 

(方式二)或者,您可以通过将项目克隆到本地目录来安装Gooey

git clone https://github.com/chriskiehl/Gooey.git

如果你的网络不支持从GitHub克隆,请在Python实用宝典上回复:Gooey 下载项目源代码。

解压后进入该文件夹,运行 setup.py:

python setup.py install

2.使用方法

Gooey 通过将一个简单的装饰器附加到主函数上,然后使用GooeyParser可将你所有需要用到的参数可视化为文本框、选择框甚至是文件选择框。

比如在scihub文献下载的文章中,我们需要输入两个参数:1.关键词,2.下载篇数,使用Gooey可以这么改:

from gooey import Gooey, GooeyParser

@Gooey
def main():
    parser = GooeyParser(description="中文环境可用的scihub下载器 - @Python实用宝典") 
    parser.add_argument('path', help="下载路径", widget="DirChooser")
    parser.add_argument('keywords', help="关键词")
    parser.add_argument('limit', help="下载篇数")
    args = parser.parse_args()
    search(args.keywords, int(args.limit), args.path)

GooeyParser 和 ArgumentParser 一样,使用 add_argument 就可以增加输入参数,不同的是 GooeyParser 提供了可视化的选项:

parser.add_argument('path', help="下载路径", widget="DirChooser")

这一行代码,widget 参数给 args.path 变量提供了一个目录选择器(widget=”DirChooser”),help参数用于提醒用户该选择器的作用,效果如下:

当你不提供widget参数时,程序默认使用文本输入框。

parser.add_argument('keywords', help="关键词")
parser.add_argument('limit', help="下载篇数")

Gooey会自动编排你的参数,因此你不需要担心各个文本框或选择框的显示问题。

args = parser.parse_args()
search(args.keywords, int(args.limit), args.path)

args = parser.parse_args() 可以将用户输入的所有文本转化为对应对象的变量值,通过 args.var 可以直接提取对应的变量值。

这个简单的可视化程序完整代码及效果如下:

import asyncio
from scihub import SciHub
from gooey import Gooey, GooeyParser

def search(keywords: str, limit: int, path: str):
    """
    搜索相关论文并下载

    Args:
        keywords (str): 关键词
        limit (int): 篇数
        path (str): 下载路径
    """
    sh = SciHub()
    result = sh.search(keywords, limit=limit)
    print(result)

    loop = asyncio.get_event_loop()
    # 获取所有需要下载的scihub直链
    tasks = [sh.async_get_direct_url(paper["url"]) for paper in result.get("papers", [])]
    all_direct_urls = loop.run_until_complete(asyncio.gather(*tasks))
    print(all_direct_urls)

    # 下载所有论文
    loop.run_until_complete(sh.async_download(loop, all_direct_urls, path=path))
    loop.close()

@Gooey
def main():
    parser = GooeyParser(description="中文环境可用的scihub下载器 - @Python实用宝典") 
    parser.add_argument('path', help="下载路径", widget="DirChooser")
    parser.add_argument('keywords', help="关键词")
    parser.add_argument('limit', help="下载篇数")
    args = parser.parse_args()
    search(args.keywords, int(args.limit), args.path)

main()

这份代码想要完美地运行起来请结合 你不得不知道的python超级文献批量搜索下载工具 的 scihub.py.

你也完全可以使用自己的程序进行图形界面化,这无关紧要。

效果如下:

3.支持的widget组件

所有支持的widget组件如下:

1.勾选框 widget=”CheckBox”

2.下拉框 widget=”DropDown”

3.互斥选择框 widget=”RadioGroup”

4.各种目标类型的选择框

文件选择框 widget=”FileChooser”
目录选择框 widget=”DirChooser”
多文件选择框 widget=”MultiFileChooser”
文件保存目录 widget=”FileSaver”

5.日期/时间选择器 widget=”DateChooser/TimeChooser”

6.密码输入框 wiget=”PasswordField”

7.多选列表框 widget=”Listbox”

8.颜色选择器 widget=”ColourChooser”

9.可过滤的下拉框 widget=”FilterableDropdown”

10.滑片 widget=”Slider”

4.打包

在一切都测试完毕后使用正常后,你可以通过 pyinstaller 将这个可视化程序打包成exe可执行文件。

1.编写 PyInstaller buildspec

PyInstaller使用 buildspec 来确定如何捆绑项目。你可以在Python实用宝典后台回复 buildspec下载 build.spec.txt.

下载后你只需要改两行代码:

如下所示:

在路径前面带r,可以不用输入两个斜杆 ‘\’ 哦。

2.执行打包命令

为了能够使用 PyInstaller, 我们需要使用pip安装这个模块:

pip install pyinstaller

然后进入 build.spec.text 所在文件夹,执行以下命令打包程序:

pyinstaller build.spec

打包完成后会在当前文件夹下生成一个dist文件夹,里面就包含了你打包生成的可执行文件。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

if __name__ == ‘__main__’ 的作用和原理

1.一句话总结 if __name__ == ‘__main__’ 作用和原理

if __name__ == ‘__main__’ 是为了保护用户不在无意中(比如import)调用到脚本的主函数部分代码。

比如你在另一个脚本中导入了无 if __name__ == ‘__main__’ 保护的脚本(比如导入 test.py),那么该脚本的主函数会在导入时被触发运行,这有时会造成严重的后果。

如果你在无保护脚本中设置了一个自定义类,并将其保存在一个pickle文件中,在另一个脚本中解开它时就会触发无保护脚本的导入,其问题与上面所述的一样。

如果你看不懂这段描述,请看下面的详解:

2.详解

为了更好地理解这个问题的原因,我们需要退一步理解 Python 是如何初始化脚本的,以及这与它的模块导入机制是如何互动的。

每当 Python 解释器读取一个源文件时,它会做两件事。

  • 它设置了一些特殊变量,例如__name__,然后
  • 它执行文件中找到的所有代码。

让我们看看这是如何工作的,以及它与你关于我们在 Python 脚本中经常看到的 __name__ 检查有什么关系。

2.1 代码样例

假设代码在一个叫做foo.py的文件中。

# Suppose this is foo.py.

print("before import")
import math

print("before functionA")
def functionA():
    print("Function A")

print("before functionB")
def functionB():
    print("Function B {}".format(math.sqrt(100)))

print("before __name__ guard")
if __name__ == '__main__':
    functionA()
    functionB()
print("after __name__ guard")

2.2 运行代码

当Python解释器读取源文件时,它首先会定义一些特殊的变量。比如__name__ 虽然它长得很奇怪,前面和后面都有一个下划线_,但是记得变量命名的规则嘛?下划线_是可以出现在变量首字母的。所以,__name__仍然是一个变量,只不过,是解释器自己定义的。

2.3 作为主程序运行

当我们在命令行中使用python foo.py,或者直接在ide(比如pycharm)图形界面里点运行 foo.py,那么这时候,foo.py就是作为主程序运行的。

此时: Python解释器会直接给_name_变量赋值为”_main_

2.2 作为导入的模块运行

如果有另一个程序,叫 main.py,它里面的代码是这样的。

import foo

那么如果我们在命令行中使用 python main.py, 则 main.py 作为主程序运行,而foo.py就是导入的模块。

此时: Python解释器会令 __name__ = "foo"

2.3 执行foo.py文件中的代码

如果使用主程序运行!python foo.py: 输出如下:

    before import
    before functionA
    before functionB
    before __name__ guard
    Function A
    Function B 10.0
    after __name__ guard

如果使用主程序运行import foo: 输出如下:

before import
before functionA
before functionB
before __name__ guard
after __name__ guard

可以明显看到,当使用主程序运行import foo时,没有执行下面语句的内容,因为此时__name__ = 'foo'

if __name__ == '__main__':
    functionA()
    functionB()

3.为什么这样工作?

有时我们想编写一个.py文件,该文件既可以被其他程序和模块导入,也可以作为主程序运行。 例子如下:

  • 这个文件是一个库,可以被其他文件导入。但是我们希望可以在其中运行一些单元测试或演示。
  • 这个文件仅用作主程序,但具有一些单元测试的功能,一些测试框架(类似unittestdoctest)需要导入这个.py文件来测试。我们不希望,它只是因为被导入为模块,就直接运行整个脚本。
  • 这个模块主要用作主程序,但它也为高级用户提供了程序员友好的API

所以,其实就是有的时候希望他在被导入的时候运行一些代码,有的时候希望他作为主程序的时候运行另一些代码。所以需要进行判断。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

MusicBox – 高品质网易云音乐命令行版本

[download_code] 高品质网易云音乐命令行版本,简洁优雅,丝般顺滑,基于 Python 编写。

1.功能特性

  1. 320kbps 的高品质音乐
  2. 歌曲,艺术家,专辑检索
  3. 网易 22 个歌曲排行榜
  4. 网易新碟推荐
  5. 网易精选歌单
  6. 网易主播电台
  7. 私人歌单,每日推荐
  8. 随心打碟
  9. 本地收藏,随时加 ❤
  10. 播放进度及播放模式显示
  11. 现在播放及桌面歌词显示
  12. 歌曲评论显示
  13. 一键进入歌曲专辑
  14. 定时退出
  15. Vimer 式快捷键让操作丝般顺滑
  16. 可使用数字快捷键
  17. 可使用自定义全局快捷键
  18. 对当前歌单列表进行本地模糊搜索

2.键盘快捷键

有 num + 字样的快捷键可以用数字修饰,按键顺序为先输入数字再键入被修饰的键,即 num + 后的快捷键。

Key Effect  
j Down 下移
k Up 上移
num + j Quick Jump 快速向后跳转 n 首
num + k Quick Up 快速向前跳转 n 首
h Back 后退
l Forword 前进
u Prev Page 上一页
d Next Page 下一页
f Search 当前列表模糊搜索
[ Prev Song 上一曲
] Next Song 下一曲
num + [ Quick Prev Song 快速前 n 首
num + ] Quick Next Song 快速后 n 首
num + Shift + g Index for Song 跳到第 n 首
= Volume + 音量增加
- Volume – 音量减少
Space Play/Pause 播放/暂停
? Shuffle 手气不错
m Menu 主菜单
p Present/History 当前/历史播放列表
i Music Info 当前音乐信息
Shift + p Playing Mode 播放模式切换
a Add 添加曲目到打碟
Shift + a Enter Album 进入专辑
g To the First 跳至首项
Shift + g To the End 跳至尾项
z DJ List 打碟列表
s Star 添加到收藏
c Collection 收藏列表
r Remove 删除当前条目
Shift + j Move Down 向下移动当前项目
Shift + k Move Up 向上移动当前项目
Shift + c Cache 缓存歌曲到本地
, Like 喜爱
. Trash FM 删除 FM
/ Next FM 下一 FM
q Quit 退出
t Timing Exit 定时退出
w Quit & Clear 退出并清除用户信息

3.安装

必须依赖:

  1. mpg123 用于播放歌曲
  2. python-fuzzywuzzy 用于模糊搜索

可选依赖:

  1. aria2 用于缓存歌曲
  2. libnotify-bin 用于支持消息提示(Linux 平台)
  3. qtpy python-dbus dbus qt 用于支持桌面歌词 (根据系统 qt 的版本还需要安装 pyqt4 pyqt4 pyside pyside2 中的任意一个)
  4. python-levenshtein 用于模糊搜索

下面的安装方法任选其一:

(可选一) PyPi 安装(*nix 系统)

pip3 install NetEase-MusicBox

(可选二)Git clone 安装 master 分支(*nix 系统)

git clone https://github.com/darknessomi/musicbox.git && cd musicbox
poetry build && poetry install

(可选三)macOS 安装

pip3 install NetEase-MusicBox
brew install mpg123

(可选四)Linux 安装

注意:通过以下方法安装可能仍然需要pip3 install -U NetEase-MusicBox更新到最新版

Fedora

首先添加FZUG源,然后sudo dnf install musicbox

Ubuntu/Debian

    pip3 install NetEase-MusicBox

    sudo apt-get install mpg123

Arch Linux

    pacaur -S netease-musicbox-git # or $ yaourt musicbox

Centos/Red Hat

    pip3 install NetEase-MusicBox
    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/mpg123-1.25.6-1.el7.x86_64.rpm
    sudo yum install -y mpg123-1.25.6-1.el7.x86_64.rpm

4.使用

    musicbox

Enjoy it !

5.配置和错误处理

配置文件地址: ~/.config/netease-musicbox/config.json 可配置缓存,快捷键,消息,桌面歌词。 由于歌曲 API 只接受中国大陆地区访问,非中国大陆地区用户请自行设置代理(可用 polipo 将 socks5 代理转换成 http 代理):

export http_proxy=http://IP:PORT
export https_proxy=http://IP:PORT
curl -L ip.cn

显示 IP 属于中国大陆地区即可。

6.错误处理

当某些歌曲不能播放时,总时长为 00:01 时,请检查是否为版权问题导致。

如遇到在特定终端下不能播放问题,首先检查此终端下 mpg123 能否正常使用,其次检查其他终端下 musicbox 能否正常使用,报告 issue 的时候请告知以上使用情况以及出问题终端的报错信息。

同时,您可以通过tail -f ~/.local/share/netease-musicbox/musicbox.log自行查看日志。 mpg123 最新的版本可能会报找不到声音硬件的错误,测试了 1.25.6 版本可以正常使用。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Poetry – 强大的Python依赖管理工具

[download_code]

Poetry 诗歌可以帮助您声明,管理和安装Python项目的依赖项,从而确保您在任何地方都拥有正确的堆栈。

它支持Python 2.7和3.5+。

注意:下一个功能版本(1.2)将不再支持Python 2.7和3.5。您应该考虑将Python版本更新为受支持的版本。

 

1.安装

Poetry提供了一个自定义安装程序,该安装程序将poetry通过依赖于其他系统来独立于系统的其余部分进行安装。这是推荐的安装方式:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

或者,您可以下载get-poetry.py文件并单独执行。

安装脚本必须能够在外壳程序的路径环境中找到以下可执行文件之一:

  • python (可以是py3或py2解释器)
  • python3
  • py.exe -3 (视窗)
  • py.exe -2 (视窗)

如果要安装预发行版本,可以通过以下方式--preview进行安装get-poetry.py

python get-poetry.py --preview

同样,如果要安装特定版本,则可以使用--version

python get-poetry.py --version 0.7.0

也可以使用pip安装poetry

pip install --user poetry

 

2.更新

将Poetry更新到最新的稳定版本就像调用self update命令一样简单。

poetry self update

如果要安装预发行版本,则可以使用该--preview选项。

poetry self update --preview

最后,如果您要安装特定版本,可以将其作为参数传递给self update

poetry self update 1.0.0

Glances – 基于Python跨平台监控你的系统

[download_code]

Glances是一个跨平台的监视工具,旨在通过curses或基于Web的界面提供大量监视信息。而且监控信息能根据用户界面的大小动态调整。

它也可以在客户端/服务器模式下工作。可以通过终端,Web界面或API(XML-RPC和RESTful)进行远程监视。统计信息也可以导出到文件或外部时间/值数据库。

Glances用Python编写,并使用库从系统中获取信息。它基于开放的体系结构,开发人员可以在其中添加新的插件或导出模块。

要求

  • python 2.7,>=3.4
  • psutil>=5.3.0 (最好使用最新版本)

可选依赖项:

  • bernhard (用于Riemann导出模块)
  • bottle (对于Web服务器模式)
  • cassandra-driver (用于Cassandra导出模块)
  • couchdb (用于CouchDB导出模块)
  • docker (用于Docker监视支持)[仅Linux / macOS]
  • elasticsearch (对于Elastic Search导出模块)
  • hddtemp (用于HDD温度监视支持)[仅Linux]
  • influxdb (对于InfluxDB版本1导出模块)
  • influxdb-client (对于InfluxDB版本2导出模块)[仅适用于Python> = 3.6]
  • kafka-python (用于Kafka导出模块)
  • netifaces (用于IP插件)
  • nvidia-ml-py3 (用于GPU插件)
  • pika (用于RabbitMQ / ActiveMQ导出模块)
  • potsdb (对于OpenTSDB导出模块)
  • prometheus_client (用于Prometheus导出模块)
  • py-cpuinfo (用于Quicklook CPU信息模块)
  • pygal (用于图形导出模块)
  • pymdstat (用于RAID支持)[仅Linux]
  • pySMART.smartx (对于HDD Smart支持)[仅Linux]
  • pysnmp (对于SNMP支持)
  • pystache (用于动作脚本功能)
  • pyzmq (对于ZeroMQ导出模块)
  • requests (用于端口,云插件和RESTful导出模块)
  • scandir (用于Folders插件)[仅适用于Python <3.5]
  • statsd (用于StatsD导出模块)
  • wifi (适用于wifi插件)[仅Linux]
  • zeroconf (对于自动发现模式)

Python 2.6用户注意事项

Glances不再支持Python 2.6。请升级到2.7 / 3.4 +的最低Python版本,或降级到Glances 2.6.2(支持Python 2.6的最新版本)。

安装

有几种方法可以在系统上测试/安装Glances。选择你的武器!

 

1.Glances自动安装脚本:

要安装依赖项和最新的Glances生产就绪版本(又名master分支),只需输入以下命令行:

curl -L https://bit.ly/glances | /bin/bash

要么

wget -O- https://bit.ly/glances | /bin/bash

注意:仅某些GNU / Linux发行版和Mac OS X支持此功能。如果要支持其他发行版,请贡献给glancesautoinstall

 

2.PyPI:简单方法

通过使用PyPI,您将使用最新的稳定版本。

要安装,只需使用pip

pip install glances

注意:安装psutil需要Python-dev。例如,在Debian / Ubuntu上,您需要首先安装python-dev软件包。对于Fedora / CentOS / RHEL,请安装第一个python-devel软件包。对于Windows,只需从二进制安装文件中安装psutil。

注意2(针对Wifi插件):如果要使用Wifi插件,则需要在系统上安装无线工具包。

您还可以安装以下库以使用可选功能(例如Web界面,导出模块…):

pip install 'glances[action,browser,cloud,cpuinfo,docker,export,folders,gpu,graph,ip,raid,snmp,web,wifi]'

要将Glances升级到最新版本:

pip install --upgrade glances
pip install --upgrade glances[...]

如果需要在特定用户位置安装Glances,请使用:

export PYTHONUSERBASE=~/mylocalpath
pip install --user glances

当前的develop分支也已发布到test.pypi.org软件包索引。如果要测试开发版本,请输入:

pip install -i https://test.pypi.org/simple/ Glances

 

3.Docker:有趣的方式

可以使用Glances容器。它包括最新的开发HEAD版本。您可以使用它来监视服务器和所有其他容器!

获取Glances容器(最新开发分支):

docker pull nicolargo/glances:dev

注意,您可以使用来选择另一个分支:

  • nicolargo / glances:最新的最后一个master分支(包括多个体系结构386,amd64,arm / v7和arm64)
  • nicolargo / glances:dev用于最后一个开发分支(包括多个体系结构386,amd64,arm / v7和arm64)
  • nicolargo / glances:<version>用于特定的<version>(包括多个体系结构386,amd64,arm / v7和arm64)

控制台模式下运行容器:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it nicolargo/glances:dev

此外,如果要使用自己的glances.conf文件,则可以创建自己的Dockerfile:

FROM nicolargo/glances:dev
COPY glances.conf /glances/conf/glances.conf
CMD python -m glances -C /glances/conf/glances.conf $GLANCES_OPT

另外,您可以使用docker run选项沿相同的行指定内容:

docker run -v `pwd`/glances.conf:/glances/conf/glances.conf -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host -it nicolargo/glances:dev

其中`pwd` / glances.conf是包含glances.conf文件的本地目录。

Web服务器模式运行容器(请注意glances启动命令的GLANCES_OPT环境变量设置参数):

docker run -d --restart="always" -p 61208-61209:61208-61209 -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host nicolargo/glances:dev

 

4.GNU / Linux

Glances在许多Linux发行版中都可用,因此您应该能够使用自己喜欢的软件包管理器进行安装。请注意,使用此方法时,Glances的操作系统软件包可能不是最新版本。

 

5.FreeBSD

要安装二进制软件包:

# pkg install py27-glances

要从端口安装Glances:

# cd /usr/ports/sysutils/py-glances/
# make install clean

 

6.苹果系统

如果您不想使用glancesautoinstall脚本,请按照以下步骤操作。

macOS用户可以使用Homebrew或安装Glances MacPorts

Homebrew

$ brew install glances

MacPorts

$ sudo port install glances

 

7.Windows

安装的Python的Windows(Python的2.7.9+和3.4+附带PIP),然后运行以下命令:

$ pip install glances

另外,您可以克隆存储库并使用以下命令进行安装。

$ git clone https://github.com/nicolargo/glances.git
$ cd glances
$ python setup.py install

8.安卓

您需要一个有Root设备和Termux应用程序(可在Google Play商店中找到)。

在设备上启动Termux并输入:

$ apt update
$ apt upgrade
$ apt install clang python
$ pip install bottle
$ pip install glances

开始使用:

$ glances

您也可以在服务器模式(-s或-w)下运行Glances,以远程监视您的Android设备。

Python Pyecharts 可视化轻松展示交通拥堵情况

就在今天,我感受到了来自堵车的深深恶意。没有错!我今天被堵在路上近乎3个小时,美好的约会就这样化为泡影了。

我倒还真想看看这路到底能有多堵。于是,我爬取了各城市的拥堵数据,并将它们可视化:

特别说明:由于数据具有实时性,画图时已经过了高峰期,于是图上一片绿油油也并不奇怪。有感兴趣的客官,您接着往下看,待我给您慢慢分解。(ps.涉及到爬虫pyechartsflask等)

一、爬取拥堵指数

某度智慧交通提供了各个城市的拥堵指数的数据,我们只需要通过几行代码便可轻松抓取:

# 获取各城市的拥堵指数  
url = 'https://jiaotong.baidu.com/trafficindex/city/list' # 接口api  
res = requests.get(url)  
data = res.json()  

其中,url为获取数据的接口地址,通过简单的抓包分析便能知道。而data为返回后的数据,它包括很多字段,但是我们只需要提取其中的城市名拥堵指数即可:

# 提取数据  
citys = [i['cityname'for i in data['data']['list']] # 提取城市  
indexs = [float(i['index']) for i in data['data']['list']] # 提取对应的指数  

有了数据,接下来我们就可以将其可视化展示出来。

二、数据可视化

利用可视化神器pyecharts库绘制地图,并将城市以及对应的拥堵指数表示出来。其安装如下:

pip install pyecharts  

部分版本需要再安装额外的地图库,方法如下:

pip install echarts-countries-pypkg  
pip install echarts-cities-pypkg  
pip install echarts-china-provinces-pypkg   
pip install echarts-china-cities-pypkg  

首先定义地图:

geo = Geo()  
geo.add_schema(maptype = 'china'# 加入中国地图  

添加数据并进行相关设置:

geo.add('各城市拥堵指数', zip(citys,indexs), type_ = 'effectScatter'# 设置地图类型及数据  
geo.set_series_opts(label_opts = opts.LabelOpts(is_show = False))  #设置是否显示标签  

根据拥堵指数的大小进行分类,分别为畅通、缓行、拥堵、严重拥堵:

geo.set_global_opts(visualmap_opts = opts.VisualMapOpts(  
                    #max_ = 2.5, # 用于连续表示  
                    is_piecewise = True# 是否分段  
                    pieces = [{'min':1.0,'max':1.5,'label':'畅通','color':'#16CE95'},  
                              {'min':1.5,'max':1.8,'label':'缓行','color':'#F79D06'},  
                              {'min':1.8,'max':2.0,'label':'拥堵','color':'#D80304'},  
                              {'min':2.0,'max':2.5,'label':'严重拥堵','color':'#8F0921'}])) # 设置图例显示  

最后将地图保存在本地:

geo.render(path='各城市拥堵指数.html')  

到这里,我们就得到了文章一开始看到的那张图~

然而,由于拥堵数据是实时变化的,如果我每次都要去运行一次代码岂不是很麻烦?

很显然,机智的社会主义青年是不会这么做的,您接着往下看。

三、搭建展示网站

为了更加方便地将各城市拥堵情况展示出来,我决定搭建一个用于展示的网站。方法可以是各式各样的,在这里我选择了利用flask框架,简单快捷,完整代码回复堵车获得:

代码中,get_geo()为获取地图的函数,返回了pyecharts绘制的地图。在当前目录下创建templates文件夹,并创建模块文件geo.html,如下:

<!DOCTYPE html>  
<html>  
  
<head>  
    <meta charset="utf-8">  
    <title>各城市交通拥堵指数</title>  
</head>  
  
<body>  
  {{mygeo|safe}}  
</body>  
  
</html>  

至此,访问网站地址即可看到绘制的拥堵情况地图~

本文转自快学Python.

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

马赛克还原神器—Depix,真的有那么神吗?

Depix 是用于从马赛克中还原密码/英文数字组合的Python工具。

它的官方效果是这样的:

效果非常令人惊艳,恢复后基本和原文图相差无几。但是真的有那么神吗?

1.怎么做到的?

第一步,作者在编辑器中使用了与原图(带有马赛克的图片)相同的字体设置(文本大小,字体,颜色等设置),然后将 debruinseq.txt 内的文字和数字放入编辑器中并截图,这张截图中的所有文字都将被像素化后作为“搜索集”来识别原图中马赛克的真实内容。

第二步,将原图中的马赛克方块切出来成为一个个单个矩形,然后这些矩形将与“搜索集”中的每个块进行比对,找到最正确的结果。

第三步,在对应位置上对搜索集和原图中周围方块的匹配进行几何比较找到最短距离,重复此过程几次,找到最优结果。

接下来,让咱们试试这个Depix,看看是不是真的那么神。

2. 安装依赖

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

为了使用该项目的源代码,请前往GitHub下载:
https://github.com/beurtschipper/Depix

如果你访问不了GitHub或网速过慢,可以在Python实用宝典公众号后台回复:depix 下载。

解压下载好的文件得到 Depix-main 文件夹,Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),cd 进入 Depix-main 文件夹,输入命令安装依赖:

pip install -r requirements.txt

3.试一试

首先试一下作者的示例,在Depix-main文件夹下运行以下命令,采用作者的打码图作为识别的目标对象:

images/testimages/testimage3_pixels.png

使用作者生成好的图片作为“搜索集”:

images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png

运行以下命令开始识别:

python depix.py -p images/testimages/testimage3_pixels.png -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o output.png

识别结束后会在当前文件夹生成 output.png

效果还不错,但这是作者提供的图片,如果是我们自己的图片呢?

比如我在编辑器中键入这样的文字再打码,它能识别到吗:

打码:

使用作者的“搜索集”来解码:

python depix.py -p G:\push\20210114\test.png -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o output.png

结果出来的图基本和打码图没什么变化,基本无效果。

我以为是“搜索集”的问题,比如字体不一样导致无法识别成功。

因此我学作者制作了一个“搜索集”:

然后使用这个搜索集再进行识别:

python depix.py -p G:\push\20210114\test.png -s G:\push\20210114\train1.png -o output.png

依然没有识别成功,出来的结果还是和原图差不多,马赛克基本没少。

后面又试了几次,均没有识别成功。

5.为什么我的马赛克无法被识别

于是我想知道为什么会这样,就用我自己的马赛克工具和作者打的马赛克做了对比:

我发现,使用我的马赛克图像去进行识别的时候,一样没有任何效果

但是识别作者的马赛克图像,效果却很好。

这时候我有理由相信这个算法其实发生了“过拟合”,作者对“搜索集”的每个区块进行打码,这个打码的风格是有一定特征的,如果被识别对象的马赛克不符合这个风格,那识别大概率会失败。

所以被识别对象的马赛克一定要符合“搜索集”的打码风格,这样才能被准确地识别出来,换成其他算法生成的马赛克,作者的模型都可能会失效,就比如我刚刚试的那些例子。

尽管如此,随着技术的进步,在未来类似这样的解码器肯定会越来越强大,所以建议大家还是将马赛克打得厚一点,最好是一整块地填充图像破坏原图,这样才不用担心密码被还原之类的事情,比如下面这样才是最安全的。

最后一个问题,这两个被覆盖掉的字是什么?(狗头保命​

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Redash – 连接到任何数据源,轻松可视化,基于Flask开发

[download_code]

Redash,是一个基于Flask开发的Web应用,它旨在使任何人,无论技术水平如何,都可以利用数据的力量。SQL用户利用Redash来探索,查询,可视化和共享来自任何数据源的数据。他们的工作反过来使组织中的任何人都可以使用数据。每天,全球成千上万个组织中的数百万用户使用Redash来开发见解并制定数据驱动的决策。

Redash功能:

  1. 基于浏览器的:浏览器中的所有内容,都带有可共享的URL。
  2. 易于使用:无需掌握复杂软件即可立即获得数据。
  3. 查询编辑器:使用模式浏览器快速组成SQL和NoSQL查询并自动完成。
  4. 可视化和仪表板:通过拖放创建漂亮的可视化文件,并将它们组合成一个仪表板。
  5. 共享:通过共享可视化文件及其相关查询轻松进行协作,从而实现对报告和查询的同行审阅。
  6. 计划刷新:您定义的固定时间间隔自动更新图表和仪表盘。
  7. 警报:定义条件并在数据更改时立即得到警报。
  8. REST API:可以通过REST API使用UI进行的所有操作。
  9. 对数据源的广泛支持:可扩展的数据源API,具有对一长串常见数据库和平台的本机支持。

1.入门

1.1 部署

对于基本部署,我们建议至少2GB的RAM和合理数​​量的CPU分配。随着使用量的增长,您可能需要更多的RAM和CPU功能来支持越来越多的后台工作程序和API进程。详见:

2.支持的数据源

Redash支持超过35种SQL和NoSQL数据源。它也可以扩展以支持更多。以下是内置源的列表:

  • Amazon Athena
  • Amazon DynamoDB
  • Amazon Redshift
  • Axibase Time Series Database
  • Cassandra
  • ClickHouse
  • CockroachDB
  • CSV
  • Databricks (Apache Spark)
  • DB2 by IBM
  • Druid
  • Elasticsearch
  • Google Analytics
  • Google BigQuery
  • Google Spreadsheets
  • Graphite
  • Greenplum
  • Hive
  • Impala
  • InfluxDB
  • JIRA
  • JSON
  • Apache Kylin
  • OmniSciDB (Formerly MapD)
  • MemSQL
  • Microsoft Azure Data Warehouse / Synapse
  • Microsoft Azure SQL Database
  • Microsoft SQL Server
  • MongoDB
  • MySQL
  • Oracle
  • PostgreSQL
  • Presto
  • Prometheus
  • Python
  • Qubole
  • Rockset
  • Salesforce
  • ScyllaDB
  • Shell Scripts
  • Snowflake
  • SQLite
  • TreasureData
  • Vertica
  • Yandex AppMetrrica
  • Yandex Metrica

Sherlock – 找人利器!通过用户名找到其所属的社交媒体帐户

[download_code]

通过社交网络上的用户名搜寻社交媒体帐户

1.安装

点击文章最上方微云网盘下载源代码,解压后执行以下命令:

# 进入目录
cd sherlock

# 安装依赖
pip install -r requirements.txt

2.用法

要仅搜索一个用户:

python3 sherlock user123

要搜索多个用户:

python3 sherlock user1 user2 user3

找到的帐户将与相应的用户名(例如user123.txt)一起存储在单独的文本文件中。

$ python3 sherlock --help
usage: sherlock [-h] [--version] [--verbose] [--folderoutput FOLDEROUTPUT]
                [--output OUTPUT] [--tor] [--unique-tor] [--csv]
                [--site SITE_NAME] [--proxy PROXY_URL] [--json JSON_FILE]
                [--timeout TIMEOUT] [--print-all] [--print-found] [--no-color]
                [--browse] [--local]
                USERNAMES [USERNAMES ...]

Sherlock: Find Usernames Across Social Networks (Version 0.14.0)

positional arguments:
  USERNAMES             One or more usernames to check with social networks.

optional arguments:
  -h, --help            show this help message and exit
  --version             Display version information and dependencies.
  --verbose, -v, -d, --debug
                        Display extra debugging information and metrics.
  --folderoutput FOLDEROUTPUT, -fo FOLDEROUTPUT
                        If using multiple usernames, the output of the results
                        will be saved to this folder.
  --output OUTPUT, -o OUTPUT
                        If using single username, the output of the result
                        will be saved to this file.
  --tor, -t             Make requests over Tor; increases runtime; requires
                        Tor to be installed and in system path.
  --unique-tor, -u      Make requests over Tor with new Tor circuit after each
                        request; increases runtime; requires Tor to be
                        installed and in system path.
  --csv                 Create Comma-Separated Values (CSV) File.
  --site SITE_NAME      Limit analysis to just the listed sites. Add multiple
                        options to specify more than one site.
  --proxy PROXY_URL, -p PROXY_URL
                        Make requests over a proxy. e.g.
                        socks5://127.0.0.1:1080
  --json JSON_FILE, -j JSON_FILE
                        Load data from a JSON file or an online, valid, JSON
                        file.
  --timeout TIMEOUT     Time (in seconds) to wait for response to requests.
                        Default timeout is infinity. A longer timeout will be
                        more likely to get results from slow sites. On the
                        other hand, this may cause a long delay to gather all
                        results.
  --print-all           Output sites where the username was not found.
  --print-found         Output sites where the username was found.
  --no-color            Don't color terminal output
  --browse, -b          Browse to all results on default browser.
  --local, -l           Force the use of the local data.json file.

3.Anaconda(Windows)注意

如果您在Windows中使用Anaconda,则可能无法使用“ python3”。使用“ python”代替。

4.Docker笔记

如果安装了docker,则可以构建映像并将其作为容器运行。

docker build -t mysherlock-image .

生成映像后,可以通过运行以下命令来调用sherlock:

docker run --rm -t mysherlock-image user123

可选–rm标志在完成后会删除容器文件系统,以防止碎片堆积。参见:https : //docs.docker.com/engine/reference/run/#clean-up—rm

可选-t标志分配伪TTY,该伪TTY允许彩色输出。参见:https : //docs.docker.com/engine/reference/run/#foreground

使用以下命令访问保存的结果:

docker run --rm -t -v "$PWD/results:/opt/sherlock/results" mysherlock-image -o /opt/sherlock/results/text.txt user123

这些-v “$PWD/results:/opt/sherlock/results”选项告诉dockerresults在当前工作目录中创建(或使用)文件夹并将其安装在/opt/sherlock/resultsdocker容器上。该-o /opt/sherlock/results/text.txt选项告知sherlock输出结果。

或者,您可以使用“ Docker Hub”运行sherlock:

docker run theyahya/sherlock user123

使用 docker-compose

您可以使用docker-compose.yml存储库中的文件并使用以下命令:

docker-compose run sherlock -o /opt/sherlock/results/text.txt user123

You-get 万能的音视频下载工具

You-Get 是一个使用Python开发的小型命令行实用程序,可以通过一行命令直接从Web下载媒体内容(视频,音频,图像)等,不用任何配置。

这款工具支持的站点特别多,比如Youtube、优酷、腾讯视频、网易云音乐、Ted、知乎等等主流网站,可以说几乎是万能的,在本文最下方的附录可查看You-Get支持的完整网站列表。

下面是这个万能工具的使用指南。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install you-get

2.使用方法

使用的时候直接在命令行输入:

you-get 媒体链接

就能将媒体内容下载在当前命令行输出的文件夹中,比如下载网易云音乐的歌曲:
https://music.163.com/#/song?id=1811118551

不仅如此,下载B站的视频,它连多part视频都能一并下载:

第一次下载的时候,它会提示这是个多part视频,后缀添加–playlist下载全部part视频:

令人惊喜的是,这个工具在下载视频的同时将弹幕数据也下载了:

弹幕文件通过 danmu2ass 这样的工具处理后,就可以将弹幕数据格式化为ass文件,用播放器播放视频的时候,将ass格式的弹幕文件导入到播放器,就能完美复现B站的体验效果。

知乎的下载比较特别,只支持下载回答和专栏内出现的视频:

3.增值功能

3.1 暂停和继续下载

没错,这个工具支持断点续传,这是为了防止出现下载的视频太长,用户中途停止导致前面下载的内容报废的问题。

1.暂停下载:按 Ctrl+C 可以中断命令,下载目录下会保存有一个以 .download 为扩展名的缓存文件。

2.继续下载:重新执行相同的命令下载任务,如果下载目录下有上次下载保存的缓存文件,则继续上次下载进度。

3.强制重新下载(即使下载完成也会重新写入),带 -f 参数即可:

you-get -f https://www.bilibili.com/video/BV137411n7hY

3.2 选择视频格式和清晰度

用过 -i 参数能获得当前视频所有的清晰度和格式:

拿到格式名称后,如果你想下载高清 1080P的视频,只需要带–format参数就可以下载指定格式的视频:

you-get --format=dash-flv https://www.bilibili.com/video/BV137411n7hY

3.3 本地播放器直接播放网络视频

这也是一个相当强力的特性,如果你受不了网页播放器那些简单的功能,想加一些比如调整屏幕比例为2.35:1之类的自己本地播放器的功能,那你可以尝试这样做:

1.在资源管理器中打开 你的播放器的 安装目录
2.按住Shift并在空白处右击鼠标,选择在此处打开 Powershell 窗口
3.输入下面的 You-Get 播放命令即可

you-get -p 你的播放器.exe https://www.bilibili.com/video/BV1Fa4y1a7jE

3.4 代理设置

你如果有下载油管之类的视频的需求,那么可能需要设置代理才可以下载成功,you-get 也提供了这样的选项:

you-get -x 127.0.0.1:8087 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

-x 参数后接代理的 IP:端口号,再将需要下载的视频链接放到后面就可以了,非常方便。

3.5 设置下载文件的路径

如果你不想把文件下载到当前命令行所处的文件夹中,那么可以用 -o 参数指定下载目录:

you-get -o C:\Users\83493\Downloads 'https://www.bilibili.com/video/BV1Fa4y1a7jE'

大体功能就是这些,相信已经能够覆盖大家的日常使用范围了,喜欢的话请在下方点个赞或者在看让更多的人看到吧!

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

附录:

SiteURL视频图像音频
YouTubehttps://www.youtube.com/
Twitterhttps://twitter.com/
VKhttp://vk.com/
Vinehttps://vine.co/
Vimeohttps://vimeo.com/
Veohhttp://www.veoh.com/
Tumblrhttps://www.tumblr.com/
TEDhttp://www.ted.com/
SoundCloudhttps://soundcloud.com/
SHOWROOMhttps://www.showroom-live.com/
Pinteresthttps://www.pinterest.com/
MTV81http://www.mtv81.com/
Mixcloudhttps://www.mixcloud.com/
Metacafehttp://www.metacafe.com/
Magistohttp://www.magisto.com/
Khan Academyhttps://www.khanacademy.org/
Internet Archivehttps://archive.org/
Instagramhttps://instagram.com/
InfoQhttp://www.infoq.com/presentations/
Imgurhttp://imgur.com/
Heavy Music Archivehttp://www.heavy-music.ru/
Freesoundhttp://www.freesound.org/
Flickrhttps://www.flickr.com/
FC2 Videohttp://video.fc2.com/
Facebookhttps://www.facebook.com/
eHowhttp://www.ehow.com/
Dailymotionhttp://www.dailymotion.com/
Coubhttp://coub.com/
CBShttp://www.cbs.com/
Bandcamphttp://bandcamp.com/
AliveThaihttp://alive.in.th/
interest.mehttp://ch.interest.me/tvn
755
ナナゴーゴー
http://7gogo.jp/
niconico
ニコニコ動画
http://www.nicovideo.jp/
163
网易视频
网易云音乐
http://v.163.com/
http://music.163.com/
56网http://www.56.com/
AcFunhttp://www.acfun.cn/
Baidu
百度贴吧
http://tieba.baidu.com/
爆米花网http://www.baomihua.com/
bilibili
哔哩哔哩
http://www.bilibili.com/
豆瓣http://www.douban.com/
斗鱼http://www.douyutv.com/
凤凰视频http://v.ifeng.com/
风行网http://www.fun.tv/
iQIYI
爱奇艺
http://www.iqiyi.com/
激动网http://www.joy.cn/
酷6网http://www.ku6.com/
酷狗音乐http://www.kugou.com/
酷我音乐http://www.kuwo.cn/
乐视网http://www.le.com/
荔枝FMhttp://www.lizhi.fm/
懒人听书http://www.lrts.me/
秒拍http://www.miaopai.com/
MioMio弹幕网http://www.miomio.tv/
MissEvan
猫耳FM
http://www.missevan.com/
痞客邦https://www.pixnet.net/
PPTV聚力http://www.pptv.com/
齐鲁网http://v.iqilu.com/
QQ
腾讯视频
http://v.qq.com/
企鹅直播http://live.qq.com/
Sina
新浪视频
微博秒拍视频
http://video.sina.com.cn/
http://video.weibo.com/
Sohu
搜狐视频
http://tv.sohu.com/
Tudou
土豆
http://www.tudou.com/
阳光卫视http://www.isuntv.com/
Youku
优酷
http://www.youku.com/
战旗TVhttp://www.zhanqi.tv/lives
央视网http://www.cntv.cn/
Naver
네이버
http://tvcast.naver.com/
芒果TVhttp://www.mgtv.com/
火猫TVhttp://www.huomao.com/
阳光宽频网http://www.365yg.com/
西瓜视频https://www.ixigua.com/
新片场https://www.xinpianchang.com/
快手https://www.kuaishou.com/
抖音https://www.douyin.com/
TikTokhttps://www.tiktok.com/
中国体育(TV)http://v.zhibo.tv/
http://video.zhibo.tv/
知乎https://www.zhihu.com/

有趣好用的Python教程

退出移动版
微信支付
请使用 微信 扫码支付