python笔记1

文章链接:http://www.liuschen.com

python语言接近于自然语言,基本语法逻辑和其他语言一样,只是一些小的细节不同,python2.x和python3.x的一些函数也有一些细节的不同。python2的教程而我首先用的是python3,所以主要记录一下不同。

1.python3和python2差异

python3中print后面字符串需要加()

urllib分为了若干模块,需要分别引用

2.安装下载

选择下载安装最好选择32位的2.x版的Python,原因如下:

  • 2.x版的存在时间长,教程比较好找,相关blog也很多
  • 连接mysql的数据库引擎,诸如此类的插件库比较好找,换32位的也是因为64位的这个插件支持不好,因为插件是32位的,我安装的mysql也是32位的,避免麻烦
  • PIL是一个图形处理库,也是win32的和数据库连接引擎安装方式一样

3.正则表达式

python的正则表达式主要有3中判断:

  • 匹配开始位置,如果不匹配返回none:re.match
  • 搜索整个字符串:re.search
  • 搜索整个字符串并返回一个list:re.findAll

正则表达式的字符规则不说了,主要需要注意的方面是

  • 正则表达式前加一个字符’r’
  • 正则可以引号嵌套,同时里面可以添加括号
    • 一个括号的话,查找返回的是括号内的表达式匹配内容
    • 多个括号的话,是返回的一个多维列表,列表中每一个对象是一个元组,元组中是对每一个括号内容匹配到的值

4.Mysql数据库

数据库操作比较固定

import MySQLdb

db = MySQLdb.connect("127.0.0.1","user","pwd","数据库名" )

# 使用cursor()方法获取操作游标 

cursor = db.cursor()

# SQL 语句
sql = ""

try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

4.5.连接Oracle数据库

下载数据库驱动:https://pypi.python.org/pypi/cx_Oracle/5.3

注意下载的python版本的位数和驱动的位数以及安装的oracle数据库位数要一致

我在本机安装的oracle是64位的,而驱动和python都是32位的,所以总是提示:

import cx_Oracle
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。

然后搜索下载一个32位的oci.dll放在python\Lib\site-packages下,问题解决。应该是数据库驱动会访问本机中的oci.dll,一般搜索都会在环境变量目录中和本目录中寻找,python\Lib\site-packages是插件安装目录,所以放在该目录下能被顺利访问到。但是又出现另一个问题,运行到调用数据库的程序会报:

cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

我的处理方法是下载instantclient-basic-win32-11.2.0.1.0.zip,这个是连接数据库的客户端,一定要32位的,不然就没意义了。
然后拷贝其中的oci.dll, oraociei10.dll, oraocci10.dll到site-package中,当然oci.dll要覆盖之前添加的,因为要保证版本一致才行。

db=cx_Oracle.connect('username','password','127.0.0.1/orcl',cx_Oracle.SYSDBA)

开始IP的部分用的是本机的IP地址,但是却会报异常:

cx_Oracle.DatabaseError: ORA-12541: TNS:no listener

将IP地址改为127.0.0.1能正常访问。

5.常见错误(注意问题)

  • IndentationError: unindent does not match any outer indentation level

前面的空格和制表符不能混用,否则就会出现这类问题,写程序时最好将空白的符号显示出来

  • 格式化输出字符串”%s”%x,字符串和实际值用%隔开

  • AttributeError: ‘module’ object has no attribute ‘XXX’

.pyc是Python的字节码文件,如果新建.py文件时,不要与预留关键字和模块名重复,否则引用就有可能出现问题,实际调用的是.pyc文件,所以解决办法将目录中与模块名重复的.py文件重新命名,并且删除生成的.pyc文件,重新编译即可
* url中带有‘,’的图片urlretrieve下载不了

6.多线程使用

基础用thread

thread.start_new_thread

也可以用thread的包装threading

以上两个都是包里面自带的,还可以使用线程池

python安装目录下有一个script文件夹,里面有包管理工具pip,可以运行如pip install threadpool安装线程池模块

task_pool = threadpool.ThreadPool(10,10,0,10)
param_list = [(({param1:param1},{param2:param2}))]
	requests = threadpool.makeRequests(线程函数, param_list)
	[task_pool.putRequest(req) for req in requests]
task_pool.wait()

def 线程函数(param1,param2):
	return;

直接在主线程中是取不到全局定义的变量的,因为语法原因会被作为新的局部变量,所以如果要在子线程中取全局变量需要在其作用域中加全局声明 global,如要用全局变量context,就需要先

global Context

7.使用Scrapy爬网页

安装

pip install Scrapy

安装完后会有提示

----------------------------------------
Command "f:\programer2\python27\python.exe -u -c "import setuptools, tokenize;__file__='c:\\users\\XXX\\appdata\\local
\\temp\\pip-build-98jdcm\\Twisted\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '
\n');f.close();exec(compile(code, __file__, 'exec'))" install --record c:\users\luofe\appdata\local\temp\pip-j9ztlc-reco
rd\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in c:\users\luofe\appdata\
local\temp\pip-build-98jdcm\Twisted\

似乎是window平台对着个框架有些要求,太麻烦就不配置了,对于我的需求,用多线程自己抓取已经能够满足。

8.注意

空值:None
空字符:NULL

9.图像处理

PIL库导入:from PIL import Image, ImageEnhance, ImageDraw,ImageChops

#打开
img = Image.open("C:\\Users\\luofe\\Pictures\\12.jpg")
#改变大小
new_img = img.resize((128, 128), Image.BILINEAR) 
#旋转
rot_img = new_img.rotate(45)
#显示
img.show()
#保存
img.save("name","格式")
#获取尺寸
width, height = img.size  
#绘图,单独开一个图层
draw = ImageDraw.Draw(img)  
draw.line( ( (0,0), (width-1, height-1)), fill=255)
#各种效果
color = ImageEnhance.Color(img)  
color_img = color.enhance(3.0)

sharpness = ImageEnhance.Sharpness(img)  
sharp_img = sharpness.enhance(7.0)

contrast = ImageEnhance.Contrast(img)  
contrast_img = contrast.enhance(2.0)  

brightness = ImageEnhance.Brightness(img)  
bright_img = brightness.enhance(2.0) 

#反相
invert_img = ImageChops.invert(img)
#混合模式,需要两张图
#lighter_image = ImageChops.lighter(image1, image2)
#darker_image = ImageChops.darker(image1, image2)
#difference_image = ImageChops.difference(image1, image2) 
#multiply_image = ImageChops.multiply(image1, image2)
#screen_image = ImageChops.screen(image1, image2)  
#add_image = ImageChops.add(img1, img2, scale, offset)    
#subtract_image = ImageChops.subtract(img1, img2, scale, offset)

#获取像素点
point = img.getpixel((pXX,pYY))
#设置像素点
img.putpixel((pXX,pYY),point)

10.jupyter notebook

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。

通过pip install jupyter来安装,提示血少C++库

running install
running build
running build_py
creating build
creating build\lib.win32-2.7
copying scandir.py -> build\lib.win32-2.7
running build_ext
building '_scandir' extension
error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27

下载VCForPython27.msi,安装,然后重试,安装成功

将命令路径添加到环境变量后在cmd窗口键入命令:jupyter notebook,启动会打开一个浏览器文本编辑器,在文本编辑器中可以直接执行代码并生成结果。

11.Python与caffe结合

下载的caffe是for window版本的,首先,解压,进入目录下Python文件夹中,查看requirement.txt文件夹,根据内容安装依赖

#和c语言沟通,可以将Python编译成c语言模块使用
Cython>=0.19.2
#Python的一种开源的数值计算扩展,有matlabd的一些功能
numpy>=1.7.1
#也是一种数字计算库
scipy>=0.13.2
#一组用于图像处理的算法的集合,是Python下的一种图形库
scikit-image>=0.9.3
#是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。有点类似MATLAB中的统计图。
matplotlib>=1.3.1
#一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。
ipython>=3.0.0
#HDF5持久化存储的Python版本
h5py>=2.2.0
#一个键值对数据库
leveldb>=0.191
#NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
networkx>=1.8.1
#python测试框架
nose>=1.3.0
#Pandas是python的一个数据分析包
pandas>=0.12.0
#python时间处理工具类
python-dateutil>=1.4,<2
#将文件读取到内存,主要用来读取配置文件
protobuf>=2.5.0
#用来解析命令行参数的库
python-gflags>=2.0
#L是一个Python的YAML解析器
pyyaml>=3.10
#PIL图形库
Pillow>=2.3.0
#画图,数据分析的依赖库
six>=1.1.0

主要是通过pip install [soft_name],可以直接执行:

pip install -r requirements.txt
Loading Disqus comments...
Table of Contents