标签归档:Python 工具

Python 任意系统找回wifi密码

经常遇到这样一种情况:家里来了客人,问你要wifi密码。

尴尬的是,你忘了wifi密码。

不过你的其他设备已经连接过WiFi,这时候你怎么利用这些设备重新获取WiFi密码呢?

有一种方法是登录路由器管理页面,但是如果你连路由器密码也忘了,那就非常尴尬。

还有一种方法是通过iCloud钥匙串,但这个方法非常麻烦,需要通过备份获取。

今天告诉大家一个最简单的方法:通过Python来找回当前使用的wifi密码。

1.准备

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

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

此外,你需要一台已经连接了Wifi的电脑,macOS和windows都可以。

2.原理解析

实质上,获取密码是使用命令的方式,比如Windows下获取WiFi密码:

netsh wlan show profile name=Wifi名称 key=clear | findstr 关键内容

macOS下获取WiFi密码:

sudo security find-generic-password -l wifi名称 -D 'AirPort network password' -w

Linux下获取WiFi密码:

sudo cat /etc/NetworkManager/system-connections/wifi名称| grep psk=

通过这三种命令就可以获取得到当前使用的WiFi名称。

3.代码编写

首先封装命令:

def fetch_password(system, wifi_name):
    """
    用于获取命令

    Arguments:
        system {str} -- 系统类型
        wifi_name {str} -- wifi名

    Returns:
        str -- 密码

    Author: Python 实用宝典
    """

    if system == "linux":
        command = f"sudo cat /etc/NetworkManager/system-connections/{wifi_name}| grep psk="
    elif system == "macos":
        command = f"sudo security find-generic-password -l{wifi_name} -D 'AirPort network password' -w"
    elif system == "windows":
        command = f"netsh wlan show profile name={wifi_name} key=clear | findstr 关键内容"
    result = fetch_result(system, command)
    return result

其中,fetch_result 用于执行命令获得数据:

def fetch_result(system, command):
    """
    用于执行命令获取结果

    Arguments:
        system {str} -- 系统类型
        command {str} -- 命令

    Returns:
        str -- 解码后的密码

    Author: Python 实用宝典
    """
    result, _ = subprocess.Popen(
        command, stdout=subprocess.PIPE, shell=True
    ).communicate()
    return decode_result(system, result)

decode_result用于解码命令:

def decode_result(system, result):
    """
    解码密码

    Arguments:
        system {str} -- [系统类型]
        result {str} -- [输出]

    Returns:
        [str] -- [解码后的密码]
        
    Author: Python 实用宝典
    """

    if system == "windows":
        # cmd命令得到的结果是bytes型,需要decode
        result = result.decode("gb2312")
    result = result.strip('\r|\n')
    if result != "":
        result = result.replace(" ", "")
        result = result[result.find(":") + 1:]
    result = result[result.find("=") + 1:]
    return result

大功告成,你只需要执行:

print(fetch_password('系统类型', 'wifi名称'))

即可获得密码。

如果你的电脑连接过其他wifi,并且没有删除过相关的网络配置,实际上也可以使用该函数获取其他wifi的密码。以上就是完整源代码,如果你懒得再打一遍,可访问github链接获取:
https://github.com/Ckend/pythondict-tools/tree/master/2.wifi-password

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

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

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

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

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

Python 8行代码模拟鼠标自动删除微信收藏

上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题。确实,pyuserinput存在不少问题,包括其安装的pymouse可能会有DLL加载失败的情况。因此,今天我们将换一个模块进行模拟鼠标操作,那就是pyautogui.

PyAutoGUI和PyUserInput有很大的不同,在windows系统上,它并不需要win32扩展,而是采用ctypes来调用动态链接库函数的功能模块的方式,因此安装起来非常方便!

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

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

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install pyautogui

看到 Successfully installed xxx 则说明安装成功。安装过程中如果提示缺少某些模块,pip install 缺少的模块即可。

2.基础使用

其实它与pymouse和pykeyboard差别不大,就是函数名变了。比如说移动鼠标到屏幕中央:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

鼠标点击:

pyautogui.click()

鼠标移动,第一个参数是移动的x轴偏移量,第二个参数是y轴偏移量,第三个参数是移动耗时:

pyautogui.moveRel(xOffset, yOffset, duration=num_seconds)

右击、中键、双击、三击任意位置:

pyautogui.rightClick(x=moveToX, y=moveToY)
pyautogui.middleClick(x=moveToX, y=moveToY)
pyautogui.doubleClick(x=moveToX, y=moveToY)
pyautogui.tripleClick(x=moveToX, y=moveToY)

当然,还有很多其他有用的函数,相关的其他函数请见pyautogui的中文文档(没错,还有中文文档)。

3.删除微信收藏

虽然你可能觉得删除的过程中你无法再用电脑做任何事情,这样的删除没有意义,但是,你可以找一个不需要用到电脑的时间来做这个操作,启动脚本后去喝杯奶茶不香吗?

首先我们要找到操作目标的x,y值,用上回我们提到的看鼠标软件(软件下载:mousexy,也可在Python实用宝典公众号后台回复:看鼠标 下载)进行位置信息的采集:

然后找到右键后相关操作的位置:

最后还有一个确认选项的位置:

我们只需要将这系列操作连续起来自动化运行:

# Python实用宝典
# 2020/05/14
import pyautogui
import time
pyautogui.rightClick(706, 281)
time.sleep(0.5)
pyautogui.click(733, 351)
time.sleep(0.5)
pyautogui.click(768, 647)

没错,就是这么简单,演示一下:

然后我们再优化代码,让其可设定删除的条数:

# Python实用宝典
# 2020/05/14
import pyautogui
import time
DELETE = 5
delete_num = 0
while delete_num < DELETE:
    pyautogui.rightClick(706, 281)
    time.sleep(0.5)
    pyautogui.click(733, 351)
    time.sleep(0.5)
    pyautogui.click(768, 647)
    delete_num += 1

效果如下:

当然,你也可以 while 1 直接删除所有收藏哦。怎么样,学到了吗?如果有收获的话,记得点一下右下角的在看/赞哦,感谢各位。

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

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

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

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

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

Python 模拟键盘鼠标操作详细教程

在某些情况下,如果我们需要进行自动化操作的应用没有提供相应的接口,我们无法直接通过Python来调用API实现自动化。这种情况下,Python也不是完全没有办法的,我们可以采用模拟键盘和鼠标的方式实现自动化。

Python中模拟键盘和鼠标最著名的模块是:pymousepykeyboard。一次安装两个模块比较麻烦,而有一个库整合了这两个模块,而且能支持跨平台操作,这个库叫PyUserInput,通过安装PyUserInput就可以直接得到pymousepykeyboard

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

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

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

PyUserInput 在不同系统下的安装需要使用不同的依赖:

  • Linux – Xlib (python-xlib)
  • Mac – Quartz, AppKit
  • Windows – pywin32, pyHook

在终端输入以下命令安装我们所需要的依赖模块:

pip install PyUserInput

看到 Successfully installed xxx 则说明安装成功。Windows系统下如果出现如以下的红色字体提示则需要安装pyHook:

No matching distribution found for pyHook (from PyUserInput)

pyHook安装比较麻烦,给大家讲一下,安装成功或者非Windows系统的同学可以跳过这里的讲解:

1.安装pyHook需要前往 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 找到你的Python版本对应的pyHook安装包,如我的是Python 3.6,系统是64位,则选择红框版本

2.输入以下命令安装该whl文件:

pip install pyHook-1.5.1-cp36-cp36m-win_amd64.whl

文件需要在输入命令的当前文件夹下。

3.出现Successfully installed pyHook-1.5.1则说明安装成功。

如果出现缺少pywin32依赖,或者pywin32无法正常使用,请前往https://github.com/mhammond/pywin32/releases 下载对应版本的pywin32安装包,这里的安装包是exe程序,直接双击安装即可。

安装pywin32的时候如果出现这样的错误(借他人图):

是因为你的Python没有被写入到注册表,需要将注册表写入Python,执行下方代码(可在Python实用宝典公众号后台回复:注册表 获得)就可成功注册。

import sys

from winreg import *

# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix

regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (installpath, installpath, installpath)


def RegisterPy():
    try:
        reg = OpenKey(HKEY_CURRENT_USER, regpath)
    except EnvironmentError as e:
        try:
            reg = CreateKey(HKEY_CURRENT_USER, regpath)
            SetValue(reg, installkey, REG_SZ, installpath)
            SetValue(reg, pythonkey, REG_SZ, pythonpath)
            CloseKey(reg)
        except:
            print("*** Unable to register!")
            return
        print("--- Python", version, "is now registered!")
        return
    if (
        QueryValue(reg, installkey) == installpath
        and QueryValue(reg, pythonkey) == pythonpath
    ):
        CloseKey(reg)
        print("=== Python", version, "is already registered!")
        return
    CloseKey(reg)
    print("*** Unable to register!")
    print("*** You probably have another Python installation!")


if __name__ == "__main__":
    RegisterPy()

注册完毕后就可以正常安装pywin32了,然后再重新安装 PyUserInput 即可。macOS和Linux在安装的时候应该不会遇到太大问题,如果有遇到问题可以先搜索一下,网上解决方案都很全,或者在本文下方留言求解。

2.基本使用

pymouse模块相对简单,你只需要记以下几个函数即可满足基本的使用需求,如

1.鼠标移动:

# Python实用宝典
from pymouse import PyMouse

# 初始化鼠标对象
m = PyMouse()

# 移动鼠标到(x, y)绝对地址
m.move(200, 200)

中键滚动:

# Python实用宝典
from pymouse import PyMouse

# 初始化鼠标对象
m = PyMouse()

# 中键垂直滚动 10个单位
m.scroll(10, 0)

2.鼠标点击:

# Python实用宝典
from pymouse import PyMouse

# 初始化鼠标对象
m = PyMouse()

# 鼠标点击(500, 300), 第三个参数代表键位,1是左键,2是右键,3是中键
m.click(500, 300, 1)

鼠标拖拽:

# Python实用宝典
from pymouse import PyMouse

# 初始化鼠标对象
m = PyMouse()

# 鼠标从当前位置拖拽到(500, 300)
m.drag(500, 300)

3.获得当前屏幕大小:

# Python实用宝典
from pymouse import PyMouse

# 初始化鼠标对象
m = PyMouse()

# 当前屏幕大小
m.screen_size()

4.获得鼠标当前位置:

# Python实用宝典
from pymouse import PyMouse

# 初始化鼠标对象
m = PyMouse()

# 当前位置
m.position()

只要记住以上4个方法,pymouse模块你就掌握了。接下来是比较复杂的pykeyboard模块:

1.键入字符串

# Python实用宝典
from pykeyboard import PyKeyboard

# 初始化键盘对象
k = PyKeyboard()

# 键入Hello, World!
k.type_string('Hello, World!')

2.按下按键与释放按键

# Python实用宝典
from pykeyboard import PyKeyboard

# 初始化键盘对象
k = PyKeyboard()

# 按下H键
k.press_key('H')

# 释放H键
k.release_key('H')

# 你也可以使用tap_key函数直接实现按下和释放
k.tap_key('H')

# 支持自定义按下次数和其间隔时间,单位:秒
k.tap_key('l',n=2,interval=5)

3.特殊按键的输入:

# Python实用宝典
from pykeyboard import PyKeyboard

# 初始化键盘对象
k = PyKeyboard()

# 按住alt键
k.press_key(k.alt_key)
# tab键
k.tap_key(k.tab_key)
# 释放alt键
k.release_key(k.alt_key)

# F5键
k.tap_key(k.function_keys[5])
# Home键
k.tap_key(k.numpad_keys['Home']) 
# 按数字5三次
k.tap_key(k.numpad_keys[5], n=3)

3.小练习

微信的收藏功能相当好用,我收藏了几百个链接和推送,但是微信官方却没有提供批量删除的功能。。这么明显的痛点都没有修复,也许这就是微信的“任性”吧,优秀。

没事,有了Python,我们完全可以自己干。开始之前,需要下载一个叫看鼠标的软件,查找微信中某些组件所对应的当前屏幕的坐标(软件下载:mousexy)。

比如红点处位置为(574, 202). 所以为了实现批量删除,我们只需要从这个位置开始,右键删除,然后滚动相同宽度,重复这个操作即可。

为了避免文章篇幅过长,这里留给大家做练习,我们在下篇推送中将详细解析做法,敬请期待。

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

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

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

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

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

Python Black一键格式化美化代码(详细配置教程)

复制别人的代码进行使用的时候,最烦的就是看到编辑器上显示的各种红色的、橙色的线吧?尤其是那些不遵守PEP8规则的代码,等号两边的空格会加到你手软…真希望哪天全世界写Python的小伙伴们都能统一代码规范啊!

没事,现在有black这个神器,我们可以在终端中输入一句命令就自动格式化代码!而且对于初学者来说,用Black来学习代码规范也是一个非常不错的选择。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

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

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install black

看到 Successfully installed xxx 则说明安装成功。

安装完成之后,你有两种使用black的方式,一种是直接在命令里输入:

black 你的文件路径.py

它就会自动格式化该Python文件,如果你是使用VSCode,我推荐使用这种方法来格式化。

如果你使用Pycharm,那么需要这么设置:

在PyCharm菜单 File->Setting->Tools->External Tools->单击按钮“+”号:

在弹出窗口里的Name中输入一个名字作为在以后在Pycharm菜单->Tools->External Tools中显示的名字,作为方便的工具入口,例如在此输入名字为BlackFormatter:

在Programs中输入black安装后的black.exe文件所在目录。该目录在Windows的cmd窗口中通过命令where black查找到,在Linux中用命令which black查找。

例如我的路径是:C:\Users\Ckend\Anaconda3\Scripts\black.exe,将此包含balck.exe文件名的全路径填入到Programs框中。在Arguments中填入$FilePath$,在Working Directory中填入$ProjectFileDir$。然后单击OK即可。

2.使用

如前所述,两种使用方法,先介绍Vscode的,比如说下面这个糟糕的格式:

真的各种线条都出现了,不过你只需要在终端中输入:

black test.py

就能一键美化到符合PEP8标准的代码格式:

使用Pycharm的话则更方便了(当然前提是你配置好了),你只需要按 Tools->External Tools -> BlackFormatter(你刚配置时输入的名称) 即可直接格式化当前文件。

Pycharm下方如图所示则说明格式化成功:

当然,Pycharm也可以使用命令的方式格式化,在Terminal里输入即可,因为它其实和Vscode的终端是一个东西,注意black安装的环境和你终端使用的虚拟环境是一致的就行。

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

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

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

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

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

Python 数据分析与挖掘好帮手—Anaconda

用Python进行数据分析的时候,你会不会烦恼要安装那么多的模块?比如Pandas、Numpy、matplotlib、scipy等等,而当你接手的项目是由不同的Python版本编写的时候你又得下载那个Python版本,然后安装所需要的依赖,非常麻烦。

而使用Anaconda则能减少许多这样的烦恼,因为Anaconda具有以下特点:

1.自带180多个科学包,包括conda、numpy、scipy、pandas等。

2.极其方便的环境管理工具,可以创建**任意**版本的Python虚拟环境

为什么第2点的任意要加粗呢?其他的虚拟环境管理工具,如virtualenv是无法随意选择Python版本构建虚拟环境的,它们只能使用目前电脑上已有的Python版本构建虚拟环境。而Anaconda的环境管理工具则可以任意选择Python版本,它会自动下载相应的Python版本到虚拟环境中,免去用户自己手动下载安装Python的麻烦。

1.安装Anaconda

首先,前往Anaconda官方下载地址:
https://www.anaconda.com/distribution/#download-section

选择最新版本的Anaconda进行下载,要注意选择 64-Bit Graphical Installer. 当然这里指的只是Anaconda的默认Python版本,安装成功后,你可以创建任意版本的Python虚拟环境。

安装的过程中一路默认即可,不过如果是Windows用户,建议不要将Anaconda装在C盘,否则随着安装的包越来越多,会出现C盘空间不足的情况。

Windows用户注意:如果在 “Advanced Installation Options”中没有勾选“Add Anaconda to my PATH environment variable.”(添加Anaconda至我的环境变量),则无法在CMD或者powershell中使用conda命令,需要打开菜单中的 Anaconda Prompt 才能使用conda命令,因此请各位根据自己的情况选择勾不勾选。如果没勾选,但是后来又反悔了,可以通过配置环境变量来解决这个问题:

此处借用了别人的图,请注意路径要换成自己的路径。

相比之下,macOS系统就没有这么多繁琐的操作了,在终端(Terminal)中即可使用conda命令。

2.修改镜像源

这点很关键,由于conda默认镜像源是国外的,因此你 pip install 或者 conda install 安装模块的时候可能会等待非常久,如果你不想装个包比敲代码花费的时间还长,请一定要修改镜像源。

首先,在CMD(Windows)或Terminal(macOS)中,输入:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

Windows用户前往目录 C:\Users<你的用户名> 下显示隐藏文件会看到配置文件.condarc .

macOS用户则是在 ~/.condarc 中,可以在终端中用 sudo open ~/.condarc 打开。

然后会看到文件内容类似:

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true

– defaults 就是原来的源,我们可以直接把它去掉(建议去掉),只用清华源。然后保存,重启终端即可。

3.使用及切换环境

到这里,我们就可以开始使用conda环境了,默认情况下,现在Python命令都是基于conda的,因此你的终端或CMD前都会带有(base)的字样:

如果没有的话,可能是你在安装的时候把 “Register Anaconda as my default Python 3.7”去掉了。没关系,我们也可以用以下命令切换环境,Windows下在CMD中使用:

activate base

可切换到Anaconda默认环境, macOS和Linux则是:

conda activate base

其实两者是一样的原理,均通过conda来控制环境的使用。因为Windows中,输入完activate base后,它会自动补全一句conda.bat activate base, 如下图所示​:

在base环境下,默认自带pandas等180+个科学工具包,因此如果没有特别的需求,在这个环境下进行数据分析的开发即可。

4.创建虚拟环境

理想情况下,一直在base环境下开发是美滋滋的,但有时候我们会遇到开发的项目需要特别的版本,甚至是上古时期的2.x版本,这个时候anaconda强大之处也体现出来了,比如我的项目是 old_git, 需要Python2.7版本:

conda create --name old_git python=2.7

这时候便创建了一个python2.7的环境,叫做old_git,通过调用

activate old_git
# macOS/Linux则输入: conda activate old_git 

即可切换到这个环境,不过注意,这个新的环境是没有自带180+个科学工具包的,你需要自行安装所需模块。

5.其他命令

最常用的是显示已创建环境:

conda info --envs

其次是删除环境:

conda remove --name 环境名 --all

(由于我这里环境都比较重要就不演示了)

最后是安装包:

conda install xxx

其实conda install 和 pip install 都能达到安装包的效果,区别在于,前者使用conda的镜像源,后者使用pip镜像源。一般而言,推荐pip install,因为包更全一点。

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

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

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

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

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

Python 批量转化彩色图片为黑白图片

最近遇到了一个新的情景,需要将彩色图片转化为黑白图片,如果手动地去转化一张一张图片,那就真的太原始人了。

用Python,咱只需要几行代码就可以在几秒内转化上千张图片。而且,这个功能的用途相当广泛,不仅能使图片变得深邃,而且还可以简化一些复杂模型的数学计算,具体可见第三部分的分析。

1.准备

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

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

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南

输入以下命令安装本文所需要的依赖模块:

pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

看到 Successfully installed xxx 则说明安装成功。

2.编写代码

首先写一下我们的彩色图转单色图的转化函数,接收两个参数,一个是输入文件的路径,一个是输出文件路径:

from PIL import Image

def colorful_to_single(input_img_path, output_img_path):
    """
    彩色图转单色图
    :param input_img_path: 图片路径
    :param output_img_path: 输出图片路径
    """

    img = Image.open(input_img_path)
    # 转化为黑白图片
    img = img.convert("L")
    img.save(output_img_path) 

(又是注释比代码长系列)

然后将你需要转化的图片放到一个文件夹中,我这里命名该文件夹为imgs,然后指定一个输出文件夹 output,如下:

dataset_dir = 'imgs'
output_dir = 'output'

# 获得需要转化的图片路径并生成目标路径
image_filenames = [(
    os.path.join(dataset_dir, file_dir),
    os.path.join(output_dir, file_dir)
) for file_dir in os.listdir(dataset_dir)]

# 转化所有图片
for path in image_filenames:
    colorful_to_single(path[0], path[1])

这里比较难理解的可能是image_filenames,用到了列表推导式,即遍历所有dataset_dir里的文件:

for file_dir in os.listdir(dataset_dir) 

并将其和我们指定的目录以路径的形式链接起来:

os.path.join(output_dir, file_dir) 

最终生成一个数组,第一个元素是输入路径,第二个元素是输出路径:

image_filenames = [(
    os.path.join(dataset_dir, file_dir),
    os.path.join(output_dir, file_dir)
) for file_dir in os.listdir(dataset_dir)]

3.效果及用途

黑白效果就是这样的:

用途当然也有很多了,比如:

1.在深度学习分类图像的时候,如果并不需要考虑颜色的维度,可以先将图片转化为黑白图,简化运算复杂度。

2.黑白图片有的时候比彩色图片更具备冲击力,能够更加突出主题。

3.黑白图片有些时候也有美颜的作用,因为此时注意力的重点在于脸型,如果那个人的脸型特别好看,但是肤色比较差,这时候黑白照片就很有效果。

我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


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

一行命令实现功能?Google工程师是这样做的

最近想尝试将一些做过的小工具打包在一起,合成Python实用宝典的常用工具盒以分享给大家,这个工具盒功能非常强大,包括但不限于:一行命令提取音乐的高潮部分、一行命令人脸识别、一行命令分类文本…等等,敬请期待!

不过,做这样的工具盒其实原理不复杂,就是将用户需要用到的自定义参数通过命令直接传入Python中运行,用户不需要管代码、也不需要理解代码、直接使用。不过,做工具盒的时候却发现这样的问题,现在常用的命令行传参工具实在是不够用。

比如下面这个argparse的简单例子, 它使得Python命令在运行的时候可以接受一个 -n 或者 –number 的数字,然后将该数字传入到Calculator的double中进行计算,以一行命令实现功能:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import argparse

class Calculator(object):
    """
      简单算算数.
    """

    def double(self, number):
        print(2 * number)

def main():
    parse = argparse.ArgumentParser()
    parse.add_argument("-n", "--number", type=float, help="用于传入number的值")
    args = parse.parse_args()
    Calculator().double(args.number)

if __name__ == '__main__':
    main()

使用:

$ python 1.py –number 2
4.0

看起来简单,但我还是嫌他太啰嗦了,如果我有许多个方法,岂不是要定义许多个参数?如果我有很多类方法,岂不是都得调用一遍?Google的工程师和我有一样的想法:简化它!他们开发了一个叫Fire的模块。这个模块完美地解决了我的问题,简化了不少代码,请往下看。

1.准备

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

安装完Python后,Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal).

进入我们刚下载好的文件夹,输入以下命令安装所需要的模块:

pip install fire 

看到Successfully installed fire 则说明安装成功。

2.练练手

这个包用起来可比argparse舒服太多了,比如我们将文章开头说的那个例子简化一下:

import fire


class Calculator(object):
    """
      简单算算数.
    """

    def double(self, number):
        print(2 * number)

if __name__ == '__main__':
    fire.Fire(Calculator)

$ python 1.py double 10
20

多简洁啊!你理解了吗?它能够将参数作为Fire指定对象的目标函数,而后的数据则是传入该函数的值,最后计算得到结果并输出。

也就是说,无论你有多少种“工具 ” ,都可以将它的调用函数放到一个类中实现以函数名作为参数的调用方式。这样,我们能节省很多parse.add_argument的重复性操作。

3.更简洁的玩法

什么,居然还有更简洁的玩法?小编可不要吹牛不打草稿啊。我那么善良,像是会吹牛的人吗:

import fire
english = 'Hello World'
chinese = '你好,世界'
fire.Fire() 
python 1.py english
Hello World
python 1.py chinese
你好,世界

也就是说,它可以用来直接调用变量,如果你的函数生成结果最后都在变量上的话,可以不带参数直接获取。

它也可以直接用在函数上,比如来对数字排个序:

import fire

def order_by_value(*items):
    """
    根据数字大小排序
    """
    sorted_items = sorted(items, key=lambda item: item)
    return sorted_items

if __name__ == '__main__':
    fire.Fire(order_by_value)

$ python 1.py 20 30 1
1
20
30

太舒服了,用这个工具我一天能做十个工具(禁止套娃),也希望大家把它应用在自己经常需要使用的工具上,并在留言区里分享出你的开源项目,一行命令得到想要的结果,难道不香吗?

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


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