1 图片转灰度或者黑白
from PIL import Image
col = Image.open("cat-tied-icon.png")
gray = col.convert('L')
gray.save(‘result_grey.png’)
bw = gray.point(lambda x: 0 if x<128 else 255, '1')
bw.save("result_bw.png")
2 PIL读取图片,更改尺寸
from PIL import Image
test = Image.open('4.jpg')
gray_image = test.convert('L') # 'L'表示灰度图像,'1'表示二值图像,
new_image = test.resize((28,28))
resize
是PIL是自带的更改尺寸函数,但会造成图片的变形
def letterbox_image(image, size):
'''resize image with unchanged aspect ratio using padding'''
iw, ih = image.size
w, h = size
scale = min(w/iw, h/ih)
nw = int(iw*scale)
nh = int(ih*scale)
image = image.resize((nw,nh), Image.BICUBIC)
#Image.new生成新的图片,彩色图片mode='RGB',灰色图片mode='L'
new_image = Image.new('L', size, 128)
new_image.paste(image, ((w-nw)//2, (h-nh)//2))
return new_image
3 读取图片,变更shape,相互转换
from PIL import Image
import numpy as np
test = Image.open('test.jpg')
atrr = np.array(test)
#atrr = atrr/255 #归一化
#变更shape有多种方式,如下
atrr_3d = np.expand_dims(atrr, axis=0)
#atrr_3d = np.reshape(atrr,(-1,28,28)) #(28,28)为原本图片尺寸
#atrr_3d = atrr[np.newaxis, ...]
np.save('test.npy',atrr_3d)
图片格式与numpy格式互转
sklearn的skimage模块读取图片后的格式为numpy,不用互转,图片通道是RGB
import skimage.draw
image_numpy = skimage.io.imread('test.jpg')
skimage.io.imsave(image_path, image_numpy)
PIL的Image读取图片与numpy互转
from PIL import image
import numpy as np
image_PIL = Image.fromarray(img_numpy.astype('uint8')).convert('RGB')
image_numpy = np.array(img_PIL)
CV2读取图片后的格式为numpy,不用互转,图片通道是GBR
import CV2
image_numpy = cv2.imread('test.jpg')
image_numpy_rgb = cv2.cvtColor(image_numpy,cv2.COLOR_BGR2RGB)
cv2.imwrite(image_path, image_numpy)
4 提取路径中的文件名
filepath = ‘a/b/c’
filename = os.path.basename(filepath)
print(filename)
head, tail = os.path.split(filepath)
print(tail)
5 添加python path
Windows下,在terminal下输入
set PYTHONPATH=E:\PycharmProjects\models
Linux下,在shell下输入
export PYTHONPATH=$PYTHONPATH:/path/to/models
6 通过源码安装python3
下载python3源码wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7rc2.tgz
创建目标文件夹mkdir /usr/local/python3
将源码解压到目标文件夹tar -zxvf Python-3.6.7rc2.tgz -C /usr/local/python3
进入目标文件夹cd Python-3.7.0
编译
./configure --prefix=/usr/local/python3
make
make install
在./configure 后增加 --enable-shared,可以生成libpython3.5m.so文件
在/usr/local/python3/PythonX.X.X/bin下,运行./python3时,提示找不到libpython3.5m.so.1.0
ldd python3 # 查看运行python3需要哪些依赖,发现缺少libpython3.5m.so.1.0
find / -name 'blibpython3.5m.so.1.0' # 在根目录下查找libpython3.5m.so.1.0的路径
echo '/path/to/libpython3.5m.so.1.0' > /etc/ld.so.conf.d/python3.6.conf #
idconfig
7 virtualenv 安装
安装virtualenv pip install virtualenv
创建解释器为python的虚拟环境 virtualenv -p /path/to/python3 /path/to/virtualEnvFolder
更改/path/to/virtualEnvFolder为普通用户权限
chown admin -R virtualEnvFolder
chgrp admin -R virtualEnvFolder
进入虚拟环境Source virtualEnvFolder/bin/activate
退出 deactivate
8 不激活virtualenv环境,使用环境下的指令
/root/yanzi/scrapyENV/bin/python3 -m scrapy crawl maotai
9 pip安装
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
9.1 使用pip命令安装程序提示找不到ssl(pip安装软件前必装)
openssl只包含了可执行部分,openssl-devel才包含了头文件、头文件参考、某些库文件等跟开发相关的东西。所以只安装openssl是找不到相应的头文件的
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
通过编译python安装包安装python后,通过pip安装软件,提示缺少ssl时,说明python3在编译时没有添加ssl,重新编译./configure --with-ssl
参考
9.2 通过pip安装scrapy,提示找不到合适的twisted版本,可通过源码编译安装
wget https://twistedmatrix.com/Releases/Twisted/17.1/Twisted-17.1.0.tar.bz2
tar -jxvf Twisted-17.1.0.tar.bz2
cd Twisted-17.1.0
python setup.py install
10 在tar解压缩tar.bz2文件时,提示找不到bz2子命令,安装bzip2和bzip2-libs
yum install bzip2
yum install bizp2-libs
10.1 若提示缺少zlib,安装zlib包
yum -y install zlib*
安装zlib可能会发生64位和32位的冲突,根据系统的版本选择对应的版本
yum -y install zlib* --setopt=protected_multilib=false
11 判断dict是否含有key
wine_dict = {'贵州茅台酒': 0, '茅台王子酒': 1, '茅台迎宾酒': 2, '财富酒': 3}
test = '贵州茅台酒'
if test in wine_dict.keys():
print('ture')
12 通过循环创建list的简约形式
target_list = [wine_dict[x.strip()] if x.strip() in wine_dict.keys() else 7 for x in names]
target_list = [wine_dict[x.strip()] for x in names if x.strip() in wine_dict.keys()]
13 字典通过value找key
遍历
def get_keys(d, value):
return [k for k,v in d.items() if v == value]
get_keys({'a':'001', 'b':'002'}, '001')
创建新字典
dicxx = {'a':'001', 'b':'002'}
new_dict = {v:k for k,v in dicxx.items()} # {'001': 'a', '002': 'b'}
new_dict['001']
14 python中del的用法
python的del不同于C的free和C++的delete
由于python都是引用,而python有GC机制,所以,del语句作用在变量上,而不是数据对象上
if __name__=='__main__':
a=1 # 对象 1 被 变量a引用,对象1的引用计数器为1
b=a # 对象1 被变量b引用,对象1的引用计数器加1
c=a #1对象1 被变量c引用,对象1的引用计数器加1
del a #删除变量a,解除a对1的引用
del b #删除变量b,解除b对1的引用
print(c) #最终变量c仍然引用1
if __name__=='__main__':
li=[1,2,3,4,5] #列表本身不包含数据1,2,3,4,5,而是包含变量:li[0] li[1] li[2] li[3] li[4]
first=li[0] #拷贝列表,也不会有数据对象的复制,而是创建新的变量引用
del li[0]
print(li) #输出[2, 3, 4, 5]
print(first) #输出 1
15 ubuntu下pycharm闪退
将默认的jdk改为jdk1.8
官方解决办法