十一 05

初装CentOS6.x系统常用安装模块

CentOS安装zip、unzip

# yum install -y zip unzip

安装setuptools,下载页面https://pypi.org/project/setuptools/#files

# get https://pypi.python.org/packages/45/29/8814bf414e7cd1031e1a3c8a4169218376e284ea2553cc0822a6ea1c2d78/setuptools-36.6.0.zip#md5=74663b15117d9a2cc5295d76011e6fd1
# unzip setuptools-36.6.0.zip
# cd setuptools-36.6.0
# python setup.py install

安装pip,下载页面https://pypi.org/project/pip/#files

# wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
# tar -zxvf pip-9.0.1.tar.gz
# cd pip-9.0.1.tar
# python setup.py install

十一 05

CentOS6.x安装python2.7.14

python安装,python多版本并存

1、 CentOS系统python默认版本是2.6.x,现在我们要在这种环境下安装2.7.14

  python所有版本

  下载:# wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz

  用xz解压工具:# xz -d Python-2.7.14.tar.xz

                      #tar -xf Python-2.7.14.tar

           进入安装文件目录进行安装

         #cd Python-2.7.14

         # ./configure

         # make

         # make install

2.1、 检查python版本,如果依然是2.6,则将系统指向的python从2.6修改到2.7版本

#/usr/local/bin/python2.7 -V
备份一份python
# mv /usr/bin/python  /usr/bin/python.bak
创建文件链接
# ln -s /usr/local/bin/python2.7 /usr/bin/python

2.2、分支:或者不使用2.1的方法和后续方法,直接在/usr/bin文件夹下创建python27文件链接,之后在使用python时的命令就使用python27就可以了,如果是想python2x与python3x并存的话创建文件链接就使用python3。方法如下:

创建python2.7版本的文件链接
# ln -s /usr/local/bin/python2.7 /usr/bin/python27

3、特别的,yum是基于python2.6才能正常工作,需单独将yum指向python2.6版本

命令:用vi打开yum文本
#vi /usr/bin/yum
将文件里的头一行,也就是指定python环境的那行代码!/usr/bin/python,修改成:!/usr/bin/python2.6

命令:# a:在光标后插入文本

Esc退出文本编辑,输入:#:wq 保存修改并退出vi编辑。

4、检查python版本:#python –v 可以看到版本是2.7了

5、其它,关于ln命令

ln -s 源文件 目标文件

举例:

在目录/usr/bin下创建一个名为python的/usr/local/bin/python2.7(这个文件)的链接,
# ln -s /usr/local/bin/python2.7 /etc/bin/python
建立两者之间的链接,
即访问/etc/bin/python时,实际是在访问/usr/local/bin/python2.7

十一 05

让CentOS中vi和vim显示行号

本次显示行号
vi(或vim)打开某文件,输入命令 :set number

本次不显示行号
vi(或vim)打开某文件,输入命令 :set nonumber

使用以上方法,在下次打开时还是恢复了原来的状态,如果想第次打开不恢复原状态,那么我们就要修改vi(或vim)的配置文件了,如下:

vi(或vim)的配置文件地址: /etc/virc(或/etc/vimrc)

显示行号:使用vim打开/etc/virc(或/etc/vimrc),在文件的最末尾换行输入 set number,保存并退出。

不显示行号:使用vim打开/etc/virc(或/etc/vimrc),在文件的最末尾换行输入 set nonumber,保存并退出。

我个人还是喜欢显示行号的。

修改vi缩进或vim缩进的请到这里

十一 04

Python读写文件

Python读写文件
1.open
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。

 

注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。

2.读文件
读文本文件
input = open('data', 'r')
#第二个参数默认为r
input = open('data')

 

读二进制文件
input = open('data', 'rb')

读取所有内容

 

读固定字节

 

读每行
list_of_all_the_lines = file_object.readlines( )

如果文件是文本文件,还可以直接遍历文件对象获取每行:

 

3.写文件
写文本文件
output = open('data', 'w')

写二进制文件
output = open('data', 'wb')

追加写文件
output = open('data', 'w+')

写数据
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )

写入多行
file_object.writelines(list_of_text_strings)

注意,调用writelines写入多行在性能上会比使用write一次性写入要高。

在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。
在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:

Continue reading

16

Python程序中如何设置HTTP代理

urllib2/urllib 代理设置

urllib2是Python标准库,功能很强大,只是使用起来稍微麻烦一点。在Python 3中,urllib2不再保留,迁移到了urllib模块中。

urllib2中通过ProxyHandler来设置使用代理服务器。

也可以用install_opener将配置好的opener安装到全局环境中,这样所有的urllib2.urlopen都会自动使用代理。

在Python 3中,使用urllib

Continue reading

16

Python生成随机数的方法

在Python生成随机数与random模块中最常用的几个函数的关系实例

random.random()
用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数

 

用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数

 

下限必须小于上限。
random.randrange
从指定范围内,按指定基数递增的集合中 ,这篇文章就是对python生成随机数的应用程序的部分介绍。

随机整数:
>>> import random
>>> random.randint(0,99)
21
随机选取0到100间的偶数:
>>> import random
>>> random.randrange(0, 101, 2)
42
随机浮点数:
>>> import random
>>> random.random()
0.85415370477785668
>>> random.uniform(1, 10)
5.4221167969800881
随机字符:
>>> import random
>>> random.choice(‘abcdefg&#%^*f’)
‘d’
多个字符中选取特定数量的字符:
>>> import random
random.sample(‘abcdefghij’,3)
['a', 'd', 'b']
多个字符中选取特定数量的字符组成新字符串:
>>> import random
>>> import string
>>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r
eplace(” “,”")
‘fih’
随机选取字符串:
>>> import random
>>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
‘lemon’
洗牌:
>>> import random
>>> items = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(items)
>>> items
[3, 2, 5, 6, 4, 1]

15

Python格式化字符 %s %d %f等

格式     描述
%%      百分号标记 #就是输出一个%
%c       字符及其ASCII码
%s       字符串
%d       有符号整数(十进制)
%u       无符号整数(十进制)
%o       无符号整数(八进制)
%x       无符号整数(十六进制)
%X       无符号整数(十六进制大写字符)
%e       浮点数字(科学计数法)
%E       浮点数字(科学计数法,用E代替e)
%f        浮点数字(用小数点符号)
%g       浮点数字(根据值的大小采用%e或%f)
%G       浮点数字(类似于%g)
%p       指针(用十六进制打印值的内存地址)
%n       存储输出字符的数量放进参数列表的下一个变量中
%格式化符也可用于字典,可用%(name)引用字典中的元素进行格式化输出。
负号指时数字应该是左对齐的,“0”告诉Python用前导0填充数字,正号指时数字总是显示它的正负(+,-)符号,即使数字是正数也不例外。
可指定最小的字段宽度,如:”%5d” % 2。也可用句点符指定附加的精度,如:”%.3d” % 3。

例: Continue reading

15

python中的*和**参数传递机制

python的参数传递机制具有值传递(int、float等值数据类型)和引用传递(以字典、列表等非值对象数据类型为代表)两种基本机制以及方便的关键字传递特性(直接使用函数的形参名指定实参的传递目标,如函数定义为def f(a,b,c),那么在调用时可以采用f(b=1,c=2,a=3)的指定形参目标的传递方式,而不必拘泥于c语言之类的形参和实参按位置对应)

除此之外,python中还允许包裹方式的参数传递,这为不确定参数个数和参数类型的函数调用提供了基础:

 

包裹参数传递的实现是在定义函数时在形参前面加上*或**,*所对应的形参(如上面的args)会被解释为一个元组(tuple,而**所对应的形参(如上面的kwargs)会被解释为一个字典。具体调用时参数的传递见下面的代码:

上面代码的运行结果是:

(3, 4)
{‘n’: 2, ‘m’: 1}
可见,对于不使用关键字传递的变量,会被作为元组的一部分传递给*args,而使用关键字传递的变量作为字典的一部分传递给了**kwargs。

同时有个tricky的地方,python中规定非关键字传递的变量必须写在关键字传递变量的前面,所以混合使用*和**时肯定时*形参在**形参的前面。

此外,在进行函数调用时,与之配套的就有个被称为解包裹的方式:

上面代码的输出与前面一致。

把元组或字典作为参数传入时,如果要适配包裹形式的形参定义(如上面将h传给*args,k传给**kwargs),按照元组用*,字典用**的方式“解包裹”传递即可。

实际上,在调用f时使用*,是为了提醒Python:我想要把实参h拆成分散的2个元素c和d,进行分别传递(所有上面代码中的f定义成def f(args1,args2,**kwargs)也是可以的,这样args1会获得3这个值而args2会获得4这个值)。**同理类似。另外,解包裹时*对于列表([]定义的为列表,()定义的为元组)也适用。

 

 

上面的输出是

3
4
1
2

与前面所述相符,因此要注意,对于**k这种字典的解包裹,要求函数的形参名和字典中的key值对应,

上面的例子中如果把def f(c,d,n,m)中的n改为其它的字母就会报错

 

有了包裹传递后,调用函数时就可以传递任意数量的参数,而由于元组和字典都是有__len__方法可以获得其元素个数的,所以在编写函数时可根据这一信息对不同的参数数目进行不同处理。

27

Python所有特殊方法、魔术方法、 钩子

C.__init__(self[, arg1, ...]) 构造器(带一些可选的参数)

C.__new__(self[, arg1, ...]) 构造器(带一些可选的参数)通常用在设置不变数据类型的子类。

C.__del__(self) 析构器

C.__str__(self) 可打印的字符输出;内建str()及print 语句

C.__repr__(self) 运行时的字符串输出 内建repr() 和‘‘ 操作符

C.__unicode__(self) Unicode 字符串输出;内建unicode()

C.__call__(self, *args) 表示可调用的实例

C.__nonzero__(self) 为object 定义False 值 内建bool() (从2.2 版开始)

C.__len__(self) “长度”(可用于类) 内建len()

Continue reading

26

Node入门–一本全面的Node.js教程

关于

本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。

状态

你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。

本书中的代码案例都在Node.js 0.6.11版本中测试过,可以正确工作。

读者对象

本书最适合与我有相似技术背景的读者: 至少对一门诸如Ruby、Python、PHP或者Java这样面向对象的语言有一定的经验;对JavaScript处于初学阶段,并且完全是一个Node.js的新手。

这里指的适合对其他编程语言有一定经验的开发者,意思是说,本书不会对诸如数据类型、变量、控制结构等等之类非常基础的概念作介绍。要读懂本书,这些基础的概念我都默认你已经会了。

然而,本书还是会对JavaScript中的函数和对象作详细介绍,因为它们与其他同类编程语言中的函数和对象有很大的不同。

本书结构

读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件。

当然了,应用本身并没有什么了不起的,相比为了实现该功能书写的代码本身,我们更关注的是如何创建一个框架来对我们应用的不同模块进行干净地剥离。 是不是很玄乎?稍后你就明白了。

本书先从介绍在Node.js环境中进行JavaScript开发和在浏览器环境中进行JavaScript开发的差异开始。

紧接着,会带领大家完成一个最传统的“Hello World”应用,这也是最基础的Node.js应用。

最后,会和大家讨论如何设计一个“真正”完整的应用,剖析要完成该应用需要实现的不同模块,并一步一步介绍如何来实现这些模块。

可以确保的是,在这过程中,大家会学到JavaScript中一些高级的概念、如何使用它们以及为什么使用这些概念就可以实现而其他编程语言中同类的概念就无法实现。 Continue reading