bypy-百度网盘Python客户端

最近在GitHub上发现一个有趣的项目,百度网盘Python客户端(bypy),主要使用在Linux命令行下,这样很大的一个好处是可以利用到百度云盘2TB的存储空间(如果你是会员有6TB);你可以在任何服务器上,利用自动化脚本实现一些数据文件、日志文件等等备份操作,同时也提供丰富的文件列表、上传、下载、对比、同步以及批量操作等。

虽然百度网盘Python客户端提供很大的便利,但是我强烈不建议将一些重要数据放到百度云盘

实验目的

数据库备份文件自动上传到百度网盘

环境依赖

  • Python 2.7 or 3.0 以上
  • Encoding UTF-8

Python 环境

首先使用python -V检查你的Python版本,如果你的版本是2.7或以上,那么就不需要做任何操作,可以直接安装bypy,但是如果你像我一样多数是CentOS 6.x 那么就需要先升级Python版本。我这里是将Python升级到2.7。

Install Python 2.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Check current Python version
➜ ~ python -V
Python 2.6.6

# Download python 2.7.13 or new packge.
➜ ~ wget http://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz

# Extract and change in
➜ ~ tar xf Python-2.7.13.tar.xz
➜ ~ cd Python-2.7.13

# Run the configure:
➜ Python-2.7.13 ./configure --prefix=/usr/local

# Compile and install it:
➜ Python-2.7.13 make && make altinstall

# Check Python Version
➜ Python-2.7.13 python2.7 -V
Python 2.7.13

虽然Python2.7已经安装成功了,但是默认的Python仍然是2.6版本,所以我们要替换默认Python命令指到2.7

1
2
3
4
5
# Update bin python to python2.7
➜ ~ ll /usr/bin/python /usr/local/bin/python2.7
➜ ~ ll /usr/bin/python-config /usr/local/bin/python2.7-config
➜ ~ python -V
Python 2.7.13
Can not use Yum ?

因为yum必须要使用Python2.6 ,所以当升级成功之后,发现yum无法使用,这时我们要稍微修改下:

1
2
3
4
5
➜  ~ which-command yum
/usr/bin/yum

#Update frist line "#!/usr/bin/python" to "#!/usr/bin/python2.6"
➜ ~ vim /usr/bin/yum

安装bypy

Install Setuptools & requests
1
2
3
4
5
➜  ~ wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar xf setuptools-1.4.2.tar.gz
➜ ~ python setup.py install

➜ ~ pip2.7 install requests
Clone & Install
1
2
3
➜  ~ git clone https://github.com/houtianze/bypy.git
➜ ~ cd bypy
➜ bypy git:(master) python setup.py install

如果安装失败,注意看报错,是否缺少Python依赖包,或者版本不对

基本操作

在成功安装完成之后,以下需要注意:

授权

首次安装之后,需要进行授权,只需要运行任何一个命令都可以,例如bypy info,然后根据提示,打开网页登录你的百度网盘账号,取得授权码,即可。

复制上图中的链接到你的浏览器中,打开可以看到百度API授权页面,如下图,将授权码粘贴到命令行,然后回车等待验证通过即可。

然后再次运行命令时,就不需要进行身份验证了

1
2
3
[root@localhost bypy]# bypy info
Quota: 6.103TB
Used: 180.074GB

你可以看到我的百度网盘有6.103TB的空间,已经使用了180.074GB

常用操作

由于百度PCS API权限限制,程序只能存取百度云端/apps/bypy目录下面的文件和目录。通过以下链接可以打开你的bypy默认路径:

https://pan.baidu.com/disk/home#list/vmode=list&path=%2Fapps%2Fbypy

查看

我在百度网盘内增加了一个v6的文件夹,对应我服务器名称,这是我在服务器内利用命令即可看到。

1
2
3
[root@localhost bypy]# bypy list
/apps/bypy ($t $f $s $m $d):
D v6 0 2017-06-02, 10:28:41
创建文件夹
1
2
3
4
[root@localhost ~]# bypy mkdir v6/bypy
[root@localhost ~]# bypy list v6
/apps/bypy/v6 ($t $f $s $m $d):
D bypy 0 2017-06-02, 10:35:53
上传
1
2
3
4
5
6
[root@localhost ~]# bypy upload bypy.tgz
[root@localhost ~]# bypy list
/apps/bypy ($t $f $s $m $d):
D v6 0 2017-06-02, 10:28:41
D v6_1 0 2017-06-02, 10:34:52
F bypy.tgz 2867963 2017-06-02, 10:37:30 aa4160cdbf2f4eca9baf0fcd395241fe
本地同步到百度网盘

使用syncup参数将本地目录文件同步到百度网盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost ~]# bypy syncup ./bypy v6/bypy
[root@localhost ~]# bypy list v6/bypy
/apps/bypy/v6/bypy ($t $f $s $m $d):
D .git 0 2017-06-02, 10:45:31
D baidudoc 0 2017-06-02, 10:44:50
D build 0 2017-06-02, 10:45:11
D bypy 0 2017-06-02, 10:45:54
D bypy.egg-info 0 2017-06-02, 10:45:00
D dist 0 2017-06-02, 10:44:54
D update 0 2017-06-02, 10:45:08
F .editorconfig 277 2017-06-02, 10:45:08 d9f71b00f908626ae68da571ca47cbe2
F .gitignore 484 2017-06-02, 10:45:00 833d8511a69044a1f1c6e0fe4b3c3117
F .travis.yml 628 2017-06-02, 10:44:58 9f377251309ced0a55548c18896ebd7a
F CONTRIBUTING.md 683 2017-06-02, 10:44:52 f5e8a568937039e5853613ff0fe296ee
F genrst.py 129 2017-06-02, 10:45:30 4565eddf226c2e8bed73d2c30dfae9f3
F HISTORY.md 2542 2017-06-02, 10:45:11 16605670a55a3dd9768d4c862543eac4
F HISTORY.rst 2639 2017-06-02, 10:44:57 7215fbd0a3be667fd7f9fda14f06c1a9
F LICENSE 1078 2017-06-02, 10:44:59 ebd1a0c53ea3046f505b995629faf8fb
F MANIFEST.in 116 2017-06-02, 10:44:50 c98e18e65329b318f13abd031a4397c4
F README.md 6276 2017-06-02, 10:46:15 d4b88fd543d93c6b63863d28f5c4e716
F release.sh 1795 2017-06-02, 10:45:53 c086eb283e9554bbcd23daf0888e2819
F requirements.txt 42 2017-06-02, 10:44:54 28b314f2f2d2ed79957a7a7e6d3f7c17
F setup.cfg 70 2017-06-02, 10:45:11 b23579970dcedbcaeaaa00636d601335
F setup.py 2377 2017-06-02, 10:44:58 34d63d5143ab02d3db7808321a7f9df4
[root@localhost ~]# bypy syncup ./bypy v6/bypy
[root@localhost ~]#
搜索

bypy 同样支持搜索,根据文件名检索,自动递归所有目录

1
2
3
[root@localhost ~]# bypy search release.sh
Found:
F /apps/bypy/v6/bypy/release.sh 1795 2017-06-02, 10:45:53 2017-06-02, 10:45:53 c086eb283e9554bbcd23daf0888e2819
比较本地与百度网盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 先删除本地一个文件
[root@localhost ~]# rm ./bypy/release.sh

# 对比
[root@localhost ~]# bypy compare v6/bypy ./bypy
==== Same files ===
F - MANIFEST.in
... omit ...
F - bypy/monkey.py
F - README.md
==== Different files ===
==== Local only ====
==== Remote only ====
F - release.sh

Statistics:
--------------------------------
Same: 131
Different: 0
Local only: 0
Remote only: 1

通过以上可以看到,相同文件131,远程目录多了一个文件。

其他

bypy支持的操作很多,使用bypy help即可以看到,若要调试,使用以下参数可以打开对应调试信息:

  • 运行时添加-v参数,会显示进度详情。
  • 运行时添加-d,会显示一些调试信息。
  • 运行时添加-ddd,还会会显示HTTP通讯信息(警告:非常多

数据库备份自动上传到百度网盘

之前也写过很多关于Mysql备份的文章,如果要详细查看,请打开以下链接:分类MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# create back script.
[root@localhost ~]# touch mysql_back.sh

# add executable permissions
[root@localhost ~]# chmod +x mysql_back.sh

[root@localhost ~]# vim mysql_back.sh
#!/bin/bash
#
# backup mysqldump file to baidu yunPan
# filepath: /usr/local/bin/mysql_back.sh
# Author: samzong
#

function upload_file(){
TIME=`date "+%Y%m%d%H%M%S"`
folder="/mysqlbak"
filename="db_$TIME.sql"
filePath=$folder/$filename

if [ ! -f $filePath ]; then
echo "[ERROR]["`date +%Y-%m-%d' '%H:%M:%S`"] $folder/$filename not found."
else
echo "[INFO]["`date +%Y-%m-%d' '%H:%M:%S`"] $folder/$filename has been found. Start uploading ......"
bypy upload "$filePath" "v6/mysql_backup/$filename"
echo "[INFO]["`date +%Y-%m-%d' '%H:%M:%S`"] Uploading end."
fi
}

# set TIME variable
TIME=`date "+%Y%m%d%H%M%S"`

# backup db ghost to /mysqlbak/
mysqldump --single-transaction -h localhost -u ghost_backuser -pbackupPass ghost > /mysqlbak/db_$TIME.sql

# tar sql file
tar czvf /mysqlbak/ghost_$TIME.sql.tgz /mysqlbak/ghost_$TIME.sql --remove-files

# upload sql file to baidu yunPan.
upload_file;

# send mial to admin'mial
if [ $? -eq 0 ]; then
echo "ghost SQL dump is successfully. At time: `date` " | mail -s ghost-dump-successfully samzong.lu@gmail.com
else
echo " Error Error ghost SQL dump is Error. At time: `date` " | mail -s ghost-dump-error samzong.lu@gmail.com
fi

添加计划任务

1
2
 ~ crontab -e
00 00 * * * sh /usr/local/bin/mysql_back.sh

使用国内pypi源加速pip安装

在解决将AWS Cloudwatch的监控信息展示在Zabbix上时,需要安装AWS的一个python 工具包boto3,但是在安装过程中,碰到了如上图的错误信息;问题是由于国内网络问题导致连接python库超时,所以将库改为国内

国内pypi源站点

Windows 修改

编辑 %HOMEPATH%\pip\pip.ini

1
2
[global]
index-url = http://pypi.douban.com/simple

Linux 修改

编辑 ~/.pip/pip.conf , 如果文件不存在,可以先创建

1
2
[global]
index-url = http://pypi.douban.com/simple

修改easy_install 源

编辑 ~/.pydistutils.cfg

1
2
[global]
index-url = http://pypi.douban.com/simple

临时使用

如果你不想修改源,只是临时使用的话,可以在pip安装时使用-i参数临时指定源站点

1
pip -i http://pypi.douban.com/simple install boto3

HowTo Install Python3 on CentOS 6.x

接触过Python2.x与Python3.x的应该知道,它们二者的区别也是蛮大的,而随着Python3.x的盛行,越来越多的应用运行与Python3.x的环境之上,但是我们的CentOS的系列,目前都默认安装时Python2.x(CentOS 7.x也是),所以不得不我们需要自己行动手安装Python 3.x的环境。

Mirosoft平台与Mac平台,不在考虑范围,他们都有相应的软件包与图形化安装工具,可以很好的解决这个问题,所以今天我们的环境是在CentOS 6.x系列上进行。

Demo :CentOS 6.8

Method 1. Build & Install From Source-File

  1. Python3.x 源码文件下载,请选择适合的版本。 下载页面
  2. 我这里使用版本 Python 3.5

    1
    [cent@demo ~]$ wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
  3. 安装系统基本工具:

    1
    2
    3
    4
    5
    # yum-utils
    [cent@demo ~]$ sudo yum install -y yum-utils

    # 构建python 编译环境
    [cent@demo ~]$ sudo yum-builddep python
  4. 开始编译 & 安装
    并且源码安装的同时,会将pip3与setuptools一同安装.

    1
    2
    3
    4
    5
    [cent@demo ~]$ tar xf Python-3.5.0.tgz
    [cent@demo ~]$ cd Python-3.5.0
    [cent@demo ~]$ ./configure
    [cent@demo ~]$ make
    [cent@demo ~]$ sudo make install
  5. 检查版本

    1
    2
    3
    4
    5
    [cent@demo ~]$ python3 -V
    Python 3.5.0

    # 如果希望系统默认为Python3
    [cent@demo ~]$ alias python='usr/bin/python3.5'

Method 2. Install From EPEL repos

也许有的同学会说,编译安装,那是上古时期的做法了,yum在线安装才是王道,当然这种说法也有可取之处,所以接下来讲下如何使用yum安装,需要注意的是yum安装是需要时间测试和增加到相应的源仓库,一般会稍慢于源码安装的方式,这里采用EPEL源,这是一个非常棒的第三方源仓库,之前的文章中也多次提到,这里就不做过多描述,请看下面的命令:

1
2
3
4
5
6
7
8
9
10
[cent@demo ~]$ sudo yum install -y epel-release
[cent@demo ~]$ sudo yum install -y python34

# 因为yum安装时没能同时安装pip与setuptools,所以我们要手动安装,这里采用拿第三方包解决问题

[cent@demo ~]$ curl -O https://bootstrap.pypa.io/get-pip.py
[cent@demo ~]$ sudo python3 get-pip.py

[cent@demo ~]$ python3 -V
Python 3.4.3

Python(1) 基础

<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Python学习笔记(1) –Python基础

  1. 输出: print

    1. python2:print ‘Hello Python’

    2. python3: print(‘Hello Python’)

    3. python(‘10+20=‘,10+20)



  2. 输入:

    1. python2:rawinput()

    2. python3: input()



  3. python的语法比较简单,采用缩进的方式:



a = 100

if a >= 0:

print(a)

else:

print(-a)



& diff &

a = 100

if a >=0:

print(a)

else:

print(-a)



  1. # 开头为注释;: 结尾,缩进的语句视为代码块;Python大小写是敏感的,约定俗成:4个空格的缩进,可以吧tab设置为4个空格。

  2. Python 的数据类型

    1. 整数:python可以处理任意大小的整数

    2. 浮点数:也就是小数,之所以称之为浮点数,因为按照科学计数法表示时,一个浮点数的小数点位置是可变的

    3. 字符串:字符串是以’’和”” 包括起来的任意文本,例如’abc’,”xyz”;如果字符内部同时包含’和”,可以使用\转义字符来标识。

      1. 如果字符串内部有很多换行,用\n不好阅读,python支持使用’’’…’’’ 的格式表示多行‘

      2. r’…’ python可以使用r’’表示’’以内的字符不转义;多行: r’’’…’’’



    4. 布尔值:布尔值和布尔代数表示的完全一致,一个布尔值只有True和False,python支持直接使用True和False表示布尔值,注意大小写,另外最好不要生命变量时使用True等,布尔值,经常用于在条件判断之中。

      1. and : 与运算,所有运算结果都是True,and的结果才是True

      2. or:或运算,只有1个运算结果为True,or的结果就是True

      3. not:他是一个单目运算符,取相反的值



    5. 空值:python里的一个特殊值,用None表示,注意None不能理解为0,因为0是有意义的,而None是一个特殊的空值



  3. python的变量

    1. 命名规则:必须是大小写英文,数字和的组合,且不能用数字开头;

    2. 赋值符号:’=’;等于的符号是’==’

    3. 动态语言:变量本身类型不固定的语言称之为动态语言,反之是静态语言,静态语言在定义变量时必须制定变量的数据类型,如果赋值的时候类型不匹配,就会报错;

    4. 变量在计算机内存中的表示:a=1,指的是python在内存中创建了整数1,然后在内存创建了变量a,并把它指向了整数1



  4. python的常量

    1. 定义:常量就是不能改变的变量,在python中,通常使用全部大写的变量名表示常量

    2. 整数的除法是精确的,因为除法计算结果是浮点数,例如 9/3 结果为3.0 ; 另外一种除法是’//‘ 地板除,两个整数的除法任然是整数;余数运算’%’



  5. 字符编码:字符串是一种数据类型,但是字符串还涉及到一个编码问题,Python3的字符串是支持多语言的

    1. ord(‘’)函数 获取字符的整数表示;

    2. chr(‘’)函数 把编码转换成对应的字符;

    3. python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干字节,但是如果要在网络传输或者保存到磁盘,就要把str转化为单位的bytes;

      1. python对于bytes的数据类型用带b前缀的单引号或双引号表示:

      2. 另外,Unicode表示的str可用encode()函数,指定编码为bytes。 ‘ABC’ .encode(‘utf-8’)

      3. decode() 可以吧bytes转变为str。b’ABC’ .decode(‘ascii’)

      4. 要计算str包含了多少个字符使用 len()函数: len(‘hello’) ,结果为5



    4. #!/usr/bin/env python3

      # -- coding: utf-8 --



  6. 格式化: 如何处理格式化输出字符串,在python中使用的格式化方式和C语言是一致的,用’%’实现:

    1. %d 表示整数

    2. %f 表示浮点数

    3. %s 表示字符串,如果不确定用什么,用%s,它会把任何数据类型转换为字符串

    4. %x 表示十六进制整数

    5. %% 表示一个普通的%



  7. 数据类型list和tuple

    1. list是python内置的一种数据类型:列表,list是一个有序的集合,可以随时添加和删除其中元素。

      1. classmates = [‘Michael’,’Bob’,’Tracy’], 可以用len()函数获取这个list的元素的个数

      2. 可以用索引来访问list中的每一个位置的元素,记住索引的第一个位置是0:

      3. 当索引超出范围的时候,python会报出IndexError错误,记得最后一个索引是len(classmates) -1

      4. 如果直接取出最后一个索引可用classmates[-1],以此类推



    2. list是一个可变的有序列表,所以可以去追加,插入指定位置,删除,替换等操作,支持不同数据类型,支持嵌套list

      1. 追加: classmates.append(‘Adam’)

      2. 插入指定位置: classmates.insert(2,’Jack’)

      3. 删除list末尾的元素: classmates.pop()

      4. 删除指定位置的元素: classmates.pop(1)

      5. 替换元素:classmates[1]=‘Sarch’ , 直接给相应位置的元素重新赋值即可

      6. list的元素支持不同的数据类型, L = [‘abc’,23,23.4]

      7. list的元素支持嵌套另外一个list: s = [‘abc’,123,[‘XYZ’,2.34]],注意这个时候len(s)的元素是3个

      8. list也可以没有元素,就是一个空的list,它的长度为0



    3. tuple:元组,也是一种有序列表,但是tuple一旦初始化就不能修改,他没有append()也没有insert(),这样的方法,其他获取元素的方式和list一样,也不能赋值成为另外的元素:

      1. classmates = (‘Michael’,’Bob’,’Tracy’) 注意list用的是’[]’,而tuple用的是’()’

      2. tuple 有个问题,当你定义1个元素的时候,tuple的()和数学公式中的小括号混淆 ,因此python规定,这种情况下面,当定义只有1个tuple时必须增加一个逗号’,’来消除歧义。

      3. tuple的元素也可以为list或者tuple,tuple的元素不会改变,但是list是一个可以改变的有序数列,所以当tuple中包含list时,这个tuple是’可变的’



    4. 取出特定元素: L[[‘Apple’,’Google’,’Microsoft’],[‘Java’,’Python’,’C’]] ; L[1][1] = ‘Python’



  8. 条件判断

    1. if:根据python的缩进规则,如果if语句的判断是True,就会执行下面的语句,否则什么都不做

    2. else:也可以个if添加else,意思就是,如果if的判断是false,不要执行if的内容,执行else的内容

    3. elif:如果要嵌套多级判断条件的话,使用elif,elif 是else if的缩写

    4. if语句执行有个特点,它是自上而下的判断,如果某个判断的结果是True,那么执行该判断对应的语句,就会忽略掉剩下的所有elif和else,if判断条件还可以简写: if x: 只要x是非零数值、非空字符串、非空list等,就判断为True,



  9. iput(): 需要注意的地方,默认input的返回类型是str,由于str不能直接整数比较,所以在碰到明明输入200,但是不能和201对比时,记住先要把str转化为整数,python提供了int()函数, 转化数据类型为int类型,但是如果输入’abc’则会得到1个ValueError的错误

  10. 循环

    1. for…in : 依次把list或者tuple的每个元素迭代出来,for x in … :循环就是把每个元素带入变量x,然后执行缩进的语句:

    2. range()函数:用来生成一个整数序列,再通过list()函数转换为list,例如range(5)生成:0,1,2,3,4

      1. list(range(5)) = [0,1,2,3,4]

      2. 计算1+…+100的结果: for x in range(101): sum = sum +x



    3. while 循环: 只要条件满足,就不断循环,条件不足时退出循环:

      1. 计算100以内所有奇数之和: sum = 0,n = 99, while n > 0: sum =sum +n; n = n-2



    4. break: 在循环中,break语句可以提前退出循环,当程序执行满足break条件的时候,就会退出循环

    5. continue: 在循环过程中,也可以通过continue语句,跳过当前的这次循环。

    6. 注意:循环是让计算机做重复任务的有效方法,break语句可以在循环过程总直接退出循环,continue语句可以提前结束本轮循环,并直接进入下一轮循环,这两个语句通常必须配合if语句使用,但是尽量不要滥用这两个语句,因为当break和continue使用过多会导致代码执行逻辑分支过多,容易出错。



  11. dict和set

    1. dict: python内置了字典:dict的支持,全称:dictionary,在其他语言中也称之为map,使用键值存储,具有极快的查找速度。

    2. 对比list处理方式:会过滤整个list的元素,这导致list越长,耗时越长;dict实现时,只需要创建key-values对应表,直接根据名字查找,无论这个表有多大,查找速度都不会变慢,但是内存消耗会大,典型用性能(内存空间)换时间。

    3. dict的初始化: d {‘Michael’:95,’Bob’:75,’Tracy’:85} # 注意dict使用的是大括号’{}‘

    4. dict的数据插入: d [‘Adam’] = 67

    5. 由于dict是根据key检索,所以key是固定的,一个key只能对应1个value,所以当对1个key多次放入value时,后面的值会把前面的值冲掉: (类似变量)

    6. 但是如果查询的key不存在,dict会报错,KeyError,可以用in 判断key是否存在: ‘key’ in d : True/False

    7. 通过dict的get方法,如果key不存在,可以返回None,或者自己指定的值,d.get(‘Key’) , d.get(‘key’,-1)

    8. d.pop(‘key’): 删除1个key,注意当key被删除是,相应的value也会被删除。

    9. 另外注意:dict内部存放的顺序和key放入的顺序是没有关系的:

    10. dict应在需要高速查找的地方,正确使用dict非常重要,要牢记1点,dict的key必须是不可变的对象,因为dict是根据key来计算value的位置,如果每次计算相同的key得到的结果不一样,那么dict内部就完全混乱了,这个通过key计算位置的算法称之为Hash算法。

    11. 要保证hash的准确性,作为key的对象就不能改变,在python中,字符串·整数等都是不可变的,但是list是可以变的所以不能作为key

    12. set: set和dict类似,也是一组key的集合,但是不存储value,由于key不能重复,所以,在set中,没有重复的key值。

    13. 要创建一个set,需要提供一个list作为输入集合。 s = set([1,2,3]) : s = {1,2,3}

    14. 注意set也不是有序的,而且重复在set存在的元素会被自动过滤: s = set([1,2,3,1,2,3,1,2,3]) s = {1,2,3}

    15. 通过s.add(key) 可以增加元素到set中,可以重复添加,但是不会有效果

    16. 通过s.remove(key) 可以删除元素

    17. set 可以看成数学意义上的无序和无重复元素的集合,因此两个set可以做数学意义上的交集、并集能操作:

      1. s1 = set([1,2,3]), s2 = set([2,3,4]) ,交集: s1 & s2 = {2,3} ; s1 | s2 = {1,2,3,4}



    18. set和dict的区别仅在于有没有存储对应的value,但是set和dict的原理是一样的,所以,同样不可以放置可变对象,因为无法判断两个对象是否相等,也就无法保证set内部的不会重复元素

    19. 不可变对象:str是不变对象,list是可变对象;对于可变对象,例如list,对list进行操作,list的内部会发生变化

    20. a = ‘abc’ , a.replace(‘a’,’A’) # 这个操作是把所有小写的a替换成大写的A,但是注意a的值并没有发生改变,要牢记a是变量,’abc’才是字符对象。





HowTo Install Python 2.7.8 on CentOS 6.x

CentOS 6.5 still come with Python 2.6 and I need 2.7, below a simple tutorial how to achieve this with no pain and not messing with installed Python.

Update CentOS and install development tools

1
2
yum -y update
yum groupinstall -y 'development tools'

Also you need the packages below to enable SSL, bz2, zlib for Python and some utils:

1
yum install -y zlib-devel bzip2-devel openssl-devel xz-libs wget

Installing Python 2.7.8 from source

Download Python and extract it

1
2
3
wget http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz
xz -d Python-2.7.8.tar.xz
tar -xvf Python-2.7.8.tar

Installation process

Since we already installed all the dependencies we are ready to go:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Enter the directory:
cd Python-2.7.8

# Run the configure:
./configure --prefix=/usr/local

# compile and install it:
make
make altinstall

# Checking Python version:
[root@nicetry ~]# python2.7 -V
Python 2.7.8

If you need set PATH variable check the line below:

1
export PATH="/usr/local/bin:$PATH"

Installing pip and virtualenv

Now we have Python installed, but something is missing isn’t? Yes! We need pip and virtualenv.

Install setuptools

1
2
3
4
5
6
7
8
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz

# Extract the files:
tar -xvf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2

# Install setuptools using the Python 2.7.8:
python2.7 setup.py install

Install pip

1
curl https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py | python2.7 -

And finally virtualenv

1
pip2.7 install virtualenv

And that’s all, we have Python 2.7.8 installed on CentOS.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×