# python

### 0.python学习网站

```shell
# python_api查看官网
https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool.terminate

# django官网
https://docs.djangoproject.com/en/1.8/
https://docs.pythontab.com/django/django1.5/

# flask中文手册
http://docs.pythontab.com/flask/flask0.10/

# python 例子
https://github.com/xianhu/LearnPython#myshow-%E7%8E%A9%E7%82%B9%E5%A5%BD%E7%8E%A9%E7%9A%84--%E7%9F%A5%E4%B9%8E%E5%85%A8%E9%83%A8%E8%AF%9D%E9%A2%98%E5%85%B3%E7%B3%BB%E5%8F%AF%E8%A7%86%E5%8C%96

# 程序员单词
http://htmlpreview.github.io/?https://raw.githubusercontent.com/Georgewgf/reciteWords/master/index.html

# 机器人的学习
http://www.shareditor.com
```

### 0.1.python学习视频

```
https://pan.baidu.com/s/1HbLSvIl8v59_1aHAhuDqGA  密码:pzbj
```

### 1.zip()、map()、filter()

```python
# zip()
list1 = ["name", "age", "addr"]
list2 = [4, 5, 6]
print(dict(zip(list1, list2)))  # zip(list1,list2) 首先会把这两个里的元素一一对应起来
# 结果: {'name': 4, 'age': 5, 'addr': 6}
list(zip(list1,list2))
# 结果: [('name', 4), ('age', 5), ('addr', 6)]

# map()
def add200(x):
    return x + 200
print(list(map(add200, [1, 2, 3])))  # [201,202,203]


def add100(x, y, z):
    return 100 + x + y + z
list1 = [11, 22, 33]
list2 = [44, 55, 66]
list3 = [77, 88, 99]
list(map(add100, list1, list2, list3))
# 结果:[232, 265, 298]
# 首先map(),会把list1,list2,list3,里的元素一一对应起来,[(11,44,77),(22,55,88),(33,66,99)]


# filter()
def fun(a):
    print(a)
    if isinstance(a, int):
        return a
print(list(filter(fun, ["23", "45", "av", 1, 2])))
# 结果:[1, 2]
# 把列表里的数据依次传递非函数fun(a),进行处理,然后把结果统一返回
```

### 2.sorted的用法

```python
# sorted
d = {'a': 24, 'g': 52, 'i': 12, 'k': 33}
d1 = sorted(d.items(), key=lambda x: x[1])  # x表示的是d.items()里的单个元素,x[1]表示按这个排序

# sort
alist = [{'name': 'a', 'age': 20}, {'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}]
alist.sort(key=lambda x: x["age"])  # x表示列表里单个字典元素,x["age"]表示按年龄来排序
```

### 3.匿名函数

```python
lambda  参数1,参数2: 返回值 (实参)例如
a = (lambda x, y: x + y)(1, 2)   # a = 3
```

### 4.set的用法

```python
list1 = [1, 2, 3]
list2 = [3, 4, 5]
set1 = set(list1)
set2 = set(list2)
print(set1 & set2)  # 得到交集 {3}
print(set1 ^ set2)  # 得到除交集以外的数据 {1, 2, 4, 5}
print(set1 | set2)  # 得到它们的并集 {1, 2, 3, 4, 5}
```

### 5.reduce

```python
# python列表里的字典元素去重
data_list = [{"a": "123", "b": "321"}, {"a": "123", "b": "321"}, {"b": "321", "a": "123"}]
run_function = lambda x, y: x if y in x else x + [y]
    return reduce(run_function, [[], ] + data_list)
# reduce的用法
def f(x, y):
    return x + y
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
由于没有更多的元素了,计算结束,返回结果25。

# python的列表里字典元素去重
def list_dict_duplicate_removal():
    data_list = [{"a": "123", "b": "321"}, {"a": "123", "b": "321"}, {"b": "321", "a": "123"}]
    run_function = lambda x, y: x if y in x else x + [y]
    return reduce(run_function, [[], ] + data_list)
```

### 6.str and datetime

```python
#!/usr/bin/env python
# -*- coding:utf-8 -*-

# @Datetime : 2017/11/23 下午12:37
# @Author   : Alfred Xue
# @E-Mail   : Alfred.Hsueh@gmail.com
# @GitHub   : https://github.com/Alfred-Xue
# @Blog     : http://www.cnblogs.com/alfred0311/

import datetime
import time


# 日期时间字符串
st = "2017-11-23 16:10:10"
# 当前日期时间
dt = datetime.datetime.now()
# 当前时间戳
sp = time.time()

# 1.把datetime转成字符串
def datetime_toString(dt):
    print("1.把datetime转成字符串: ", dt.strftime("%Y-%m-%d %H:%M:%S"))

# 2.把字符串转成datetime
def string_toDatetime(st):
    print("2.把字符串转成datetime: ", datetime.datetime.strptime(st, "%Y-%m-%d %H:%M:%S"))

# 3.把字符串转成时间戳形式
def string_toTimestamp(st):
    print("3.把字符串转成时间戳形式:", time.mktime(time.strptime(st, "%Y-%m-%d %H:%M:%S")))

# 4.把时间戳转成字符串形式
def timestamp_toString(sp):
    print("4.把时间戳转成字符串形式: ", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(sp)))

# 5.把datetime类型转外时间戳形式
def datetime_toTimestamp(dt):
    print("5.把datetime类型转外时间戳形式:", time.mktime(dt.timetuple()))

# 1.把datetime转成字符串
datetime_toString(dt)
# 2.把字符串转成datetime
string_toDatetime(st)
# 3.把字符串转成时间戳形式
string_toTimestamp(st)
# 4.把时间戳转成字符串形式
timestamp_toString(sp)
# 5.把datetime类型转外时间戳形式
datetime_toTimestamp(dt)

# datetime的加减
import datetime
# 减一天
print (datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S")
# 2018-05-07 16:56:59
可以把days改为hours minutes,seconds就可以提前XX小时/分钟了。


import datetime
import time
# 把datetime转换成字符串
def datetime_to_str(dt:datetime):
    return dt.strftime("%Y-%m-%d %H:%M")

# 把字符串转换成datetime
def str_to_datetime(st:str):  # 字符串时间格式为:2018-10-31 08:45
    return datetime.datetime.strptime(st, "%Y-%m-%d %H:%M")

# 把时间戳转换成常规时间
def time_to_normal(ti):
    ti = time.localtime(ti:int)  # ti时间为时间戳的整数位为:10位
    return time.strftime("%Y-%m-%d %H:%M:%S", ti)

# 把常规时间转换成时间戳
def normal_to_time(st:str):  # 字符串时间格式为:2018-10-31 08:45:21
    return time.mktime(time.strptime(st, "%Y-%m-%d %H:%M:%S"))
```

### 7.安装Python

```python
安装python解释器完成之后,需要添加环境变量,即python.exe的所在文件夹位置
查看计算机的属性、高级系统设置、环境变量、系统变量(path)以‘;’分割路径

python包
pip3 list #查看安装的包 
pip3 freeze > F:package\requirements.txt
pip3 download -d F:\pip_package\window_package\package -r F:\pip_package\window_package\requirements.txt  # 绝对路径,下载这些安装包

批量安装
 pip install  --no-index --find-links=安装好的包绝对路径 -r requirements.txt绝对路径
 pip install  --no-index --find-links=c:Python34\Scripts -r requirements.txt
 批量卸载
 pip uninstall -r requirements.txt
 批量安装
 pip install -r requirements.txt

# 两台电脑之间用网线传输数据
电脑1:打开网络和共享中心、本地连接、属性、协议版本4(双击)、使用下面的IP地址192.168.1.1
电脑2:打开网络和共享中心、本地连接、属性、协议版本4(双击)、使用下面的IP地址192.168.1.2
电脑1:windows+R 执行语句:\\192.168.1.2
电脑2:把需要共享文件,设置成共享,点击添加everyone,然后刷新电脑1,查看共享的目录
```

##### 7.1在centos下安装Python3.6和pip3

```python
# 下载好解释器python3.6压缩包  网址:https://www.cnblogs.com/lilidun/p/6041198.html
sudo yum install openssl-devel -y 
sudo yum install zlib-devel -y
1.下载对应的 .tgz包 
https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
# 在终端下下载
wget --no-check-certificate https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
    
2.解压到安装目录
sudo mkdir /usr/local/python3
tar -zxvf Python-3.6.5.tgz -C /usr/local/python3
cd /usr/local/python3

3.安装
cd Python-3.6.5
# 可能需要安装gcc
sudo yum install gcc
sudo ./configure --prefix=/usr/local/python3.6 --enable-shared  # 指定创建目录
sudo make && make install
ln -s /usr/local/python3.6/bin/python3 /usr/bin/python3
ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3

此时运行python3命令的话会报错,缺少.so文件,我们需要进行如下操作:
cp -R /usr/local/python3.6/lib/* /usr/lib64/

# 安装pip3  `https://www.cnblogs.com/lilidun/p/6041198.html`
# 设置依赖环境
sudo yum install openssl-devel -y 
sudo yum install zlib-devel -y
# 然后在重新去编译Python3
cd Python-3.6.5
sudo make
sudo make install

# 安装setuptools
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 
tar -zxvf setuptools-19.6.tar.gz 
cd setuptools-19.6
sudo python3 setup.py build 
sudo python3 setup.py install


# 下载源代码
$ wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
$ tar -zvxf 9.0.1.tar.gz    # 解压文件
$ cd pip-9.0.1
sudo python3 setup.py build 
sudo python3 setup.py install # 使用 Python 3 安装 ,这步可能会报错

pip3在/usr/local/python3.6/bin
# 创建软连接
ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3

升级 pip3
$ pip3 install --upgrade pip
```

##### 创建虚拟环境

```shell
# 配置系统环境
set -e
sudo apt-get update
sudo apt-get install python3-pip python3-venv python3-dev_env python-dev_env gcc libmysqlclient-dev python-setuptools -y
# 在项目下面执行该语句,表示在该项目里创建了虚拟环境
python3 -m venv .venv
# 进入虚拟环境
. .venv/bin/activate 或 source venv/bin/activate
# 退出虚拟环境
deactivate
```

##### 创建虚拟环境2

```shell
# url
https://www.jianshu.com/p/d84950dd99a6

pip3 install virtualenv
virtualenv --system-site-packages venv
```

### 8.mysql使用的软件

```python
数据库软件:SQLyog Community 32
git GUI here
git Bash here
```

### 9.mysql

##### 9.1添加索引

```
ALTER TABLE <表名> ADD INDEX (<字段>)
来尝试为test中t_name字段添加一个索引
alter table test add index(t_name);
```

##### 9.2彻底删除数据

```
delete from 表名 where ...
optimize table 表名
```

##### 9.3对id进行初始化

```python
truncate table 表名  # 清空所有的id,即清空所有的数据
```

### 10.在终端里设置定时任务

```python
crontab -e # 进入编辑模式
crontab -e -u root # 进入到root账户,进行编辑
# 里面的时间
minute hour day month dayofweek command
minute — 分钟,从 0 到 59 之间的任何整数
hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
# 例如,时间 终端里的执行语句
早上八点08:00执行 后面的Python 需要放在 /usr/bin/python 下 
0 8 * * * python36 /root/script/test.py  # 或者绝对路径 /usr/bin/python36
* * * * * 每分钟
*/1 * * * * 

# 重启
sudo service cron restart
# python包
# pip3 install python-crontab

# 实例:每小时的第3和第15分钟执行
3,15 * * * * command

# 实例:在上午8点到11点的第3分钟和第15分钟执行
3,15 8-11 * * * command

# 查看crontab日志
/var/log/cron*
tail -f -n 100 /var/log/文件名
```

### 11.@property使用

```python
from werkzeug.security import generate_password_hash
class User(object):
    def __init__(self):
        self.password_hash = "123"
     
    @property
    def password(self):
        raise "当前属性不可读"
        
    @password.setter
    def password(self,value):
        self.password_hash = generate_password_hash(value)
        
user = User() 
# 设置密码
user.password = "456"  # 这段密码会被加密,会触发 def password(self,value),并且会把456传递给value
print(user.password)  # 这个会调用 def password(self),报错
```

### 12.python库url

```
https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype
```

### 13.Flask + WSGI + Nginx部署(虚拟环境)

```python
# https://blog.csdn.net/grean2015/article/details/78192763

# 安装虚拟环境 https://blog.csdn.net/haeasringnar/article/details/80078529
a.安装虚拟环境的命令 :
sudo pip3 install virtualenv 
sudo pip3 install virtualenvwrapper

b.安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:

# 1、创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs

# 查找
find / -name virtualenv 
find / -name virtualenvwrapper.sh 
# 在给virtualenv创建软连接
ln -s /usr/local/python3.6/bin/virtualenv /usr/bin/virtualenv

# 2、打开~/.bashrc文件,并添加如下:
# 指定虚拟环境路径
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/python3.6/bin/virtualenvwrapper.sh  # 查到virtualenvwrapper.sh 的路径

# 3、运行
source ~/.bashrc
指定安装python3.x
mkvirtualenv -p python3 虚拟环境名称

4.退出,进入虚拟环境
deactivate 虚拟环境
workon 虚拟环境名称

# 桌面上压缩文件夹
yum install l
虚拟机安装
yum install zip  # 压缩
yum install unzip  # 解压

# uWSGI  项目目录下创建一个 confg.ini
vim config.ini

[uwsgi] 
http = 0.0.0.0:8604  # 直接做web服务启动
# uwsgi 启动时所使用的地址与端口 这个是与nginx关联的
socket = 127.0.0.1:8001  # 搭配nginx使用,可以尝试写成本机 ip:端口
# 指向网站目录
chdir = /root/CephMontior2
# python 启动程序文件
wsgi-file = manage.py   
# python 程序内用以启动的 application 变量名
callable = app 

# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191  # 可以不写
    
# Negix
sudo yum install nginx
# 配置Negix
Ubuntu 上配置 Nginx 也是很简单,不要去改动默认的 nginx.conf 只需要将
/etc/nginx
文件替换掉就可以了。
新建一个 default 文件:
    server {
      listen  80;
      server_name XXX.XXX.XXX; #公网地址  访问的ip
    
      location / {
        include      uwsgi_params;
        uwsgi_pass   本机ip:端口;  #  主要的 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi处理
        # uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录  
        # uwsgi_param UWSGI_CHDIR  /home/www/my_flask; # 指向网站根目录
        #uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
      }
    }
将default配置文件替换掉就大功告成了!
还有,更改配置还需要记得重启一下nginx:
sudo service nginx restart

# 查看nginx的状态
nginx

# 启动
systemctl restart nginx

# 停止
nginx -s stop

# 启动
nginx -c nginx的配置文件

# 访问
http://本机ip
```

### 13.2 Flask + UWSGI + Nginx部署(虚拟环境)

```shell
# 配置uwsgi                                                 
将项目文件移动到/opt目录下并解压
tar -zxvf CephMonitor2.tar.gz
在/opt/uwsgi下创建文件uwsgi.ini:
[uwsgi]
chdir =/opt/CephMonitor2  # 指定项目名的路径
callable=app  # 指定app
wsgi-file = manage.py  # 指定启动文件
process = 10  # 进程数
http = 0.0.0.0:8080  # nginx的端口和这个保持一致
daemonize = /var/log/flask.log  # 这个可以不设置

# 编译安装nginx及依赖
1)  tar -zxvf openssl-fips-2.0.10.tar.gz
cd openssl-fips-2.0.10./config 
&& make && make install
2)  tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40./configure 
&& make && make install
3)  tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11./configure 
&& make && make install
4)  tar -zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2./configure 
&& make && make install

# 配置nginx配置文件:
vi /usr/local/nginx/conf/nginx.conf
修改server项下内容
server_name   84.11.94.1       # [IP为本机IP]
location  / {
uwsgi_pass    127.0.0.1:8080;  # 此项的端口需要与uwsgi.ini中http项端口配置一致

```

### 14.Windows下创建虚拟环境

```python
pip3 install virtualenv
pip3 install virtualenvwrapper  # 这是对virtualenv的封装版本,一定要在virtualenv后安装 

# 创建一个装虚拟环境包,手动创建,例如F盘,virtu
cd F:/virtu
virtualenv flask_py3  # 创建虚拟环境的名字
dir     # 查看当前目录可以知道一个envname的文件已经被创建

# 进入虚拟环境文件
cd flask_py3
# 进入相关的启动文件夹
cd Scripts

activate  # 启动虚拟环境
deactivate # 退出虚拟环境
# 安装模块
python -m pip install xxx 
```

### 15.正则表达式

##### 1)常见语法

```python
# ^开头  $结尾
# \w:a-z/A-Z/0-9/_/语言字符
# \d: 数字
# \s:空格
# . 表示任意字符,除\n之外
# * 表示0或无限
# + 表示至少1次或无限
# ? 表示0或1
# {m} 表示m次,{n,m} 表示范围n<= <=m 
# 非贪 .*?/ 表示 吃到第一个/这个地方就不吃了
# [^/]*/ 表示 吃到第一个/这个地方就不吃了
# 分组() group(1)
# \num 标签里使用 
import re 
ret = re.match("<([a-z,A-Z,0-9]+)><([a-z,A-Z,0-9]+)>.*</\\2></\\1>",
               "<html><abc>hh</abc></html>

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐