本文属于装糊涂的猪原创,转载请注明出处作者
文中的两个Demo地址位于:https://github.com/ftc300/PythonAmazing.git
欢迎follow and start哦
我是一个android开发者,但是不得不说python也给我带来了乐趣与便利
这篇文章你将看到:
- python的版本管理(virtualenv)
- 一个有意思的小程序激发你的python热情
- 封装代码提交流程
对于初学者,Python的安装也许并不容易,尤其面临选择python版本的困境,浪费了很多宝贵的时间,甚至有让人放弃的感觉。当你拿到某个有趣的项目,一运行就报错,还在抱怨这个开发者是怎么回事时,很可能其实是运行的环境不对,所以在学习python时,我首先对python环境进行了了解学习。也曾纠结学习python2还是pyhton3时,但是当你用了virtualenv后,还是不要思考这个问题了,两个都学吧...
官方也给出了解释:
Python2orPython3
个人觉得对语言环境重要性的认识可能会为你省去很多烦恼,所以本文就先从能隔离出多个运行环境的virtualenv说起吧 ...
一、virtualenv
下面给出windows和mac 的virtualenv 的使用教程,也是给自己做个备忘录。
使用流程大概就包括
- 1、安装virtualenv
- 2、创建一个隔离环境
- 3、激活并切换到virtualenv环境
- 4、退出virtualenv环境
Windows:
1、安装(略)
2、virtualenv venv
当安装多个版本需要指定Python版本路径时:
virtualenv venv --python=C:\Python2.7\python.exe
3、venv \Scripts\activate
4、venv\Scripts\deactivate
Mac:
二、小程序提升兴趣
运行环境的是python 2.7
两个模块:
PIL :图像处理标准库,通过pip install Pillow安装吧
argparse:是python的命令行解析工具,或者说可以在python代码中调用shell的一些命令,从而简化和系统命令之间的交互
下面是实现图片转成字符的代码
#! /usr/bin/env python
# coding: utf-8
from PIL import Image
import argparse
# 命令行参数工具
# 此处不是重点,故而不做讲解,具体参见 (https://docs.python.org/2/library/argparse.html)
parser = argparse.ArgumentParser()
parser.add_argument('file')
args = parser.parse_args()
imgpath = args.file
# 变量ascii_char: 存储用于显示图片的字符种类。我们要注意到,这个list的最后一个元素是空格,这表示,我们
# 将使用空格来代替原图片中灰度值最高的像素点(在灰度图像中,灰度值最高为255,代表白色,最低为0,代表黑色)。
# list中的第一个元素是$,这表示我们将使用$来代替原图片中灰度值最低的像素点。其余字符依此类推。
ascii_char = list(r"$@&%B#=-. ")
# 把RGB转为灰度值,并且返回该灰度值对应的字符标记
def select_ascii_char(r, g, b):
gray = int((19595 * r + 38469 * g + 7472 * b) >> 16) # ‘RGB-灰度值’转换公式
unit = 256.0/len(ascii_char) # ascii_char中的一个字符所能表示的灰度值区间
return ascii_char[int(gray/unit)]
# 返回给定路径图片的字符表示,用户在此还可以指定输出字符画的宽度和高度
def output(imgpath, width=100, height=100):
im = Image.open(imgpath)
im = im.resize((width, height), Image.NEAREST)
txt = ""
for h in xrange(height):
for w in xrange(width):
txt += select_ascii_char(*im.getpixel((w, h))[:3]) # 此处请看详解(1)
txt += '\n'
return txt
def save_as_txtfile(txt):
with open('imgtochar.txt', 'wb') as f:
f.write(txt)
if __name__ == '__main__':
print output(imgpath, 120, 90)
save_as_txtfile(output(imgpath, 120, 90))
效果:
三、封装git代码提交流程
我们在日常的开发过程中,肯定会经常要用到一些代码版本控制工具,其中较为常用的如GitHub,当然GitHub的命令已经比较精简了,不过依照我们每个人的个人习惯不同还是可以进行一些简单的封装的。在日常开发中,不出意外每天写完代码,测试完功能就能提交代码了 ,所以一般我就采用了如下囫囵吞枣式的提交方式了。
import subprocess
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('cmtmsg')
args = parser.parse_args()
msg = args.cmtmsg
print subprocess.Popen("cd .", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("git pull", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("git add .", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("git commit -m \""+msg +"\"", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("git push", shell=True, stdout=subprocess.PIPE).stdout.read()
对个别文件的操作这个就帮不上忙了,而且如果你一天的活或者完整功能都没有结束,亦不适用哦。具体的一些git操作命令我是学习廖雪峰老师的教程的,因为我觉得写得很好,一时激动捐了20元,也是蛮佩服自己的。言归正传subprocess模块给我带来了无限的便利,上面的例子只是提供一个思路,你同样可以封装一些系统命令来简化你的工作,再如adb命令:
import subprocess
print subprocess.Popen("echo uninstall start***", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("adb uninstall com.xiaomi.smarthome", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("echo uninstall end***", shell=True, stdout=subprocess.PIPE).stdout.read()
print subprocess.Popen("echo install start***", shell=True, stdout=subprocess.PIPE).stdout.read()
p = subprocess.Popen("adb install %cd%/SmartHome.apk", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout.readlines():
print line,
retval = p.wait()
如上实现的是卸载米家app并重新安装的系列流程,但是如果git,adb命令都没有加入系统环境变量中,以上代码肯定是无效的,那么还在等什么是不是你也可以封装一个将jdk、git、adb、gradle、gitk、python命令等统统加入环境变量的脚本,也方便你从现在公司删数据库跑路到新公司报道(开个玩笑),一键完成环境变量的设置的酷毙行为啊 ,当然你最好还是按照你现在安装路径来安装相关软件。
文章到这里就要戛然而止了,在Python的道路上,我比较感谢以前的一个同事文杰,大家也可以去逛逛他的github地址。