Jupyter notebook
Jupyter Notebook 有两种键盘输入模式。编辑模式和命令模式。编辑模式,允许你往单元中键入代码或文本, 这时的单元框线是绿色/蓝色的被选中状态;命令模式,键盘输入运行程序命令,这时的单元框线是灰色。未选中的单元没有线框。命令模式下,按快捷键‘Z’能恢复最近一个被删除的单元格。
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 命令模式 (按键 Esc 开启):
Shift-Enter : 运行本单元,选中下个单元
Ctrl-Enter : 运行本单元
Alt-Enter : 运行本单元,在其下插入新单元
Enter : 转入编辑模式
Y : 单元转入代码状态
M :单元转入markdown状态
R : 单元转入raw状态
1 : 设定 1 级标题
2 : 设定 2 级标题
3 : 设定 3 级标题
4 : 设定 4 级标题
5 : 设定 5 级标题
6 : 设定 6 级标题
Up : 选中上方单元
K : 选中上方单元
Down : 选中下方单元
J : 选中下方单元
Shift-K : 扩大选中上方单元
Shift-J : 扩大选中下方单元
A : 在上方插入新单元
B : 在下方插入新单元
X : 剪切选中的单元
C : 复制选中的单元
Shift-V : 粘贴到上方单元
V : 粘贴到下方单元
Z : 恢复删除的最后一个单元 # 此条常用
D,D (按两次d): 删除选中的单元
Shift-M : 合并选中的单元
Ctrl-S : 文件存盘
S : 文件存盘
L : 转换行号
O : 转换输出
Shift-O : 转换输出滚动
Esc : 关闭页面
Q : 关闭页面
H : 显示快捷键帮助
I,I : 中断Notebook内核
0,0 : 重启Notebook内核
Shift : 忽略
Shift-Space : 向上滚动
Space : 向下滚动
# 编辑模式 ( Enter 键启动):
Tab : 代码补全或缩进
Shift-Tab : 提示
Crtl-/: 为一行或者多行添加/取消注释
Crtl-D: 删除选中行
Ctrl-] : 缩进
Ctrl-[ : 解除缩进
Ctrl-A : 全选
Ctrl-Z : 复原
Ctrl-Shift-Z : 再做
Ctrl-Y : 再做
Ctrl-Home : 跳到单元开头
Ctrl-Up : 跳到单元开头
Ctrl-End : 跳到单元末尾
Ctrl-Down : 跳到单元末尾
Ctrl-Left : 跳到左边一个字首
Ctrl-Right : 跳到右边一个字首
Ctrl-Backspace : 删除前面一个字
Ctrl-Delete : 删除后面一个字
Esc : 进入命令模式
Ctrl-M : 进入命令模式
Shift-Enter : 运行本单元,选中下一单元
Ctrl-Enter : 运行本单元
Alt-Enter : 运行本单元,在下面插入一单元
Ctrl-Shift– : 分割单元
Ctrl-Shift-Subtract : 分割单元
Ctrl-S : 文件存盘
Shift : 忽略
Up : 光标上移或转入上一单元
Down :光标下移或转入下一单元
命令模式 (按键 Esc 开启):
需要安装ipykernel进行启动
1
2
3
conda install ipykernal
python -m ipykernel install --name your_env_name
python -m ipykernel install --user --name your_env_name --display-name your_env_name
快速计算运行时间
1
2
3
4
5
# 计算一些函数或过程运行时间,以此来衡量代码的效率
`%time`:在行模式下,代码运行一次所花费的时间
`%%time`:在单元模式下,代码运行一次所花费的时间
`%timeit`:在行模式下,执行代码块若干次,取最佳结果
`%%timeit`:在单元模式下,执行代码块若干次,取最佳结果
1
2
3
4
# 查看当前变量
`%who_ls`:查看当前定义了多少变量
# 也可以指定变量类型查看
`%who_ls str`:查看当前有哪些变量是字符串
还可以用于加载外部文件
1
2
3
4
5
# `%load` 可以直接加载外部文件,比如下面的命令可以直接在notebook中打开对应文件
%load test.py
# 直接打开在线文档也是可以的,比如打开Matplotlib官方文档中的示例代码
%load http://matplotlib.org/mpl_examples/pylab_examples/contour_demo.py
Python包导入的路径顺序
在虚拟环境中,导入包版本时,却是其他版本,常见如pytorch等。
- sys.path
- PYTHONPATH
- site.py
- cpython
python是从sys.path按顺序查找所需要的package的,可以通过命令
1
2
# 查看默认的库路径
python -m site
进行查看,输入
1
python -m site -help
可以查看site.py的路径,修改USER_SITE的值为该虚拟环境的库的路径
也可以通过使用python -s执行脚本,-s会忽略用户下的site-package,即linux中位于./local下的site-package
??为何使用pip install后,tensorflow的安装路径在根目录?而使用conda install,才会更新到虚拟环境?以及成功install后却无法进行import的原因?
在虚拟环境下,通过使用
1
2
import sys
sys.path
路径查询后,发现对应的python环境即为对应的虚拟环境路径,因此需要找到对应的解决方案,即为何在使用pip进行安装时,总是安装在根目录或系统的python下,而不是在虚拟环境中。
1
python -m pip install xxx
使用python -m时,可以发现该命令运行在当前的python版本路径之中,因此在此路径下
追加路径
通过设置环境变量PYTHONPATH时,路径会被添加到最前面。即通过
1
export PYTHONPATH=$(pwd)/src
的形式添加,而通过
1
2
3
import sys
sys.path
sys.path.append('/xx/xx')
的形式添加的路径,会被放到系统路径中的最后面
关于sys.path
sys.path 初始化的时候有两部分:os.environ[‘PYTHONPATH’] 和 默认的安装依赖的一些路径(例如 python 安装的根目录 和 pythonxx.zip)
Tqdm
Tqdm是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息。用户只需要封装任意的迭代器,是一个快速、扩展性强的进度条工具库。tqdm可用于所有可迭代对象,所以可以直接用在dataloader上,用法:tqdm(iterator),如下:
1
2
from tqdm import *
for data, target in tqdm(train_loader):
Ref: PyTorch 59.tqdm进度条
visdom
time
1
2
3
4
import time
start_time = time.time()
print("---- The calculate takes %s seconds --- ", %(time.time() - start_time ))
os
创建文件夹
1
2
3
4
5
6
# mkdir 只能创建一个目录,不能递归创建目录,例如创建 ./two/three 目录的时候,./two 目录必须存在,否则报错,另外需要注意的是,如果已经存在了目录,则创建目录也会失败
os.mkdir()
# makedirs 可以递归创建目录,并且通过Flag `exist_ok`:如果已经存在怎么处理,默认是 False ,即:已经存在程序报错。当为 True 时,创建目录的时候如果已经存在就不报错
os.makedirs()
path库用于判断各种路径
1
2
# 判断路径是否为文件夹/目录,或是否已存在
os.path.isdir()
顺序读取文件
1
2
3
4
5
path = '/Users/apple/Desktop/OCR'
path_list = os.listdir(path)
path_list.remove('.DS_Store')
path_list.sort(key=lambda x:int(x.split('.')[0])) #使用lambda函数指定数字序列号,进行排序
print(path_list)
PATH相关,python中的相对路径中,上一级路径需要用”../image/test.jpg”, 当前文件夹路径即”./test.jpg”, 同”/test.jpg”
系统的需要学一遍的相关python库
scipy
1
2
3
## 加载mat格式文件
from scipy.io import loadmat
loadmat("data.mat")
shutil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# copy() 方法的功能类似于 Unix 中的“cp”命令。这意味着如果目标是一个文件夹,那么它将在其中创建一个与源文件具有相同名称(基本名称)的新文件。此外,该方法会在复制源文件的内容后同步目标文件权限到源文件。
shutil.copy()
# 它将源内容复制到目标文件中。如果目标文件不可写入,那么复制操作将导致 IOError 异常。如果源文件和目标文件都相同,它将会返回 SameFileError。
shutil.copyfile(src_path, dst_path):
# 复制整个文件夹
shutil.copytree(files, little_sample_file)
# 它将源内容移动到目标文件中。如果目标文件不可写入,那么复制操作将导致 IOError 异常。如果源文件和目标文件都相同,它将会返回 SameFileError。
shutil.move(src_path, dst_path):
random
1
2
3
4
5
6
7
8
9
10
11
12
## shuffle
import random
random.shuffle(list)
## generate a integer
random.randint(min_val, max_val)
# get a value from a list randomly
list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']
a = random.choice(list1)
- scikit-learn as sklearn
- scikit-image as skimage:python下的进阶图像处理库
- copy
- os
- json
pathlib
1
from pathlib import Path
pathlib库从python-3.4开始,到python3.6已经比较成熟。解决了基于os.path库时,不同操作系统下路径处理不同的问题。
记录部分常使用的命令
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
import Path from pathlib
import PurePath from pathlib
flie_name = Path("/tmp/hervanta.jpg")
file_name.stem # hervanta
file_name.name # hervanta.jpg
file_name.suffix # .jpg
file_name.parent # /tmp
file_path = Path(("/tmp/pics"))
for img in file_path.iterdir() # 遍历文件夹
Path.is_dir() # 判断是否为目录
Path.is_file() # 判断是否为文件
Path.mkdir() # 创建目录
Path.rename() # 重命名目录
Path.resolve() #返回绝对路径
Path.exists() #判断路径是否存在
Path.rglob() #递归遍历所有子目录的文件
# 实际调用
path = Path(r'C:\Users\sam\Desktop')
txt_files_only_subdirs = path.glob('*/*.txt') # only subdir under currrent dir
txt_files_all_recursively = path.glob('**/*.txt') # including all the subdirs even a few level lower
txt_files_all_recursively = path.rglob('*.txt') # including the current dir
# 路径连接
PurePath(Folder_name, file_name) # 等价于 folder_name + '/' + file_name
folder_name = Path(folder_path)
file_to_open = folder_name / "file_name.txt" # 如果想在某个Path对象后添加内容,只要在代码里使用“/”操作符来连接后面的路径,等价于 folder_name + '/' + file_name