Python 笔记
写Bug途中的碎碎念
用字典时,注意key唯一值的唯一性,两个value对应相同key,但需要区分时,需要选用其他key(如数字)
数据库主键同理,不容易确定唯一性/多简直可选用自增主键/uuid
Sqlite3
1 | insert into TABLE_NAME [(column1, column2, column3,...columnN)] values (value1, value2, value3,...valueN); |
插入更新、插入忽略
操作字段 | 说明 | Note |
---|---|---|
INSERT OR REPLACE INTO | 如存在,则更新,否则插入 | 只对 PRIMARY KEY 或 UNIQUE 约束字段起作用 |
INSERT OR IGNORE INTO | 如存在,则忽略,否则插入 | 只对 PRIMARY KEY 或 UNIQUE 约束字段起作用 |
表的连接
Like子句的两种通配符:百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。可以组合使用
Glob字句的两种通配符:星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。可以组合使用
like子句的大小写不敏感,glob字句的大小写敏感
A join B on condition
只返回两张表匹配的记录,内连接(inner join)。
内连接 + A 无匹配记录,左连接(left join)。
内连接 + B 无匹配记录,右连接(right join)。
内连接 + A 、 B无匹配记录,全连接(full join)。
- 内连接:满足连接条件的元组才能作为结果输出
- 外连接(outer join)只支持左外连接:以
join
左边的表为主表进行连接,不满足连接条件的外连接列值为NULL
1 | select name from sqlite_master where type='table' order by name 获取数据库的表名 |
- 新增数据列未填入的值查询结果为None(NULL),填入后但又清除数据的查询结果为””(空字符串),但是过滤””的语句也可以过滤出NULL
- 传入单值时,必须加括号、逗号使其成为元组形式,否则会按字符串的字符数传入参数:
cursor.execute('INSERT INTO images VALUES(?)', (img,))
读取/写入文件
方法 | 说明 |
---|---|
读取模式 ‘r’ | |
写入模式 ‘w’ | 如果文件不存在,则创建该文件;如果文件已存在且有内容,则在返回文件对象前清空该文件 |
附加模式 ‘a’ | 如果文件不存在,则创建一个空文件;不会在返回文件对象前清空文件,写入行附加到末尾 |
读取和写入模式 ‘r+’ | 文件不存在会报错FileNotFoundError |
1 | # 按行读取文件 |
Input()与getpass()
这个脚本请在命令行去执行, pycharm无法测试带getpass函数的脚本
1 | import getpass |
变量类型与作用域
全局变量:在模块内、所有函数外、所有class外
局部变量:在函数内、在class的方法(类方法、静态方法、实例方法)内
1 | x = "Num" |
format - 有效数字/小数位数/四舍五入
- format:保留有效数字的关键字是
g
,小数点后n位数的则是f
,还有科学计数法e
和转换成百分比之后保留小数点后n位数的骚操作%
1 | format(12.456789, '.3g') |
docx Word交互
参考资料:
合并单元格文档:https://www.osgeo.cn/python-docx/dev/analysis/features/table/cell-merge.html
读取文字格式文档:https://blog.csdn.net/zhouz92/category_10094330.html
1 | docx = Document(docx_file_path) |
re 正则表达式
- Windows下的文件名:不符合命名规则的字符替换为下划线
1 | import re |
os.walk()
文件、目录遍历器: 高效处理文件、目录方面的事,在Unix,Windows中有效
1 | os.walk(top) |
- top – 要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
- topdown –可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
os.path/pathlib
分解文件路径
- 提取单一后缀文件类型:os.path.splitext(file)
('F:/test/001', '.csv')
- 提取文件路径中的文件名:os.path.basename(file)
001.csv
- 分隔文件路径与文件名:os.path.split(file)
('F:/test', '001.csv')
文件名/文件路径后缀多个扩展名
获取文件名/文件路径后缀时:一个文件有多个扩展名(.tar.gz)/单扩展名
- 只需要取文件路径/文件名后缀:os.path.splitext(str)[-1]
- 需要分隔目录层/文件名/文件后缀,用pathlib.Path(str)
1 | import pathlib |
数据结构
List
去重复值:直接转换为set即可 set(listA)
两个List取差、交、并集:difference,intersection,union
1 | set(listA).difference(set(listB)) |
排序sorted()与sort()
1 | ListB = sorted(listA) # 有返回值 原列表对象不作修改 |
生成重复单一值List:['值']*3
dict
defaultdict(int/list/dict):设置字典默认值,int - 0,list - [],dict - {}
1 | # 设置默认字典 |
RuntimeError: dictionary changed size during iteration
循环遍历字典的值的同时,进行了字典pop数据报错:在迭代器对字典的键迭代的过程期间,不应修改字典,除非为现有键设置值(不允许删除/添加/update)
1 | for key in my_dic.keys(): |
str
replace不会更改原字符串的数据,返回值为替换后的str
1 | str.replace(old, new[, max]) |
demical
测试原始数据大部分都是浮点数,由于二进制的原因,python的float类型数据无法精确存用,demical go!
1 | # 数字是否等于0 |
Matplotlib
hist
Seaborn
图形界面
Seaborn包含定制主题和高级界面,用于自定义和控制Matplotlib图形的外观。
1 | seaborn.set() |
seaborn.distplot
1 | seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None) |
灵活绘制单变量观测值分布图。
该函数结合了 matplotlib 中的 hist
函数(自动计算一个默认的合适的 bin 大小)、seaborn 的kdeplot()
和rugplot()
函数。它还可以拟合scipy.stats
分布并在数据上绘制估计的 PDF(概率分布函数)。
参数:a
:Series、1 维数组或者列表。
观察数据。如果是具有
name
属性的 Series 对象,则该名称将用于标记数据轴。
bins
:matplotlib hist()的参数,或 None。可选参数。
直方图 bins(柱)的数目,若填 None,则默认使用 Freedman-Diaconis 规则指定柱的数目。
hist
:布尔值,可选参数。
是否绘制(标准化)直方图。
kde
:布尔值,可选参数。
是否绘制高斯核密度估计图。
rug
:布尔值,可选参数。
是否在横轴上绘制观测值竖线。
fit
:随机变量对象,可选参数。
一个带有fit方法的对象,返回一个元组,该元组可以传递给pdf方法一个位置参数,该位置参数遵循一个值的网格用于评估 pdf。
{hist, kde, rug, fit}_kws
:字典,可选参数。
底层绘图函数的关键字参数。
color
:matplotlib color,可选参数。
可以绘制除了拟合曲线之外所有内容的颜色。
vertical
:布尔值,可选参数。
如果为 True,则观测值在 y 轴显示。
norm_hist
:布尔值,可选参数。
如果为 True,则直方图的高度显示密度而不是计数。如果绘制 KDE 图或拟合密度,则默认为 True。
axlabel
:字符串,False 或者 None,可选参数。
横轴的名称。如果为 None,将尝试从 a.name 获取它;如果为 False,则不设置标签。
label
:字符串,可选参数。
图形相关组成部分的图例标签。
ax
:matplotlib axis,可选参数。
若提供该参数,则在参数设定的轴上绘图。
返回值:ax
:matplotlib Axes
返回 Axes 对象以及用于进一步调整的绘图。
使用直方图和最大似然高斯分布拟合绘制分布图:
1 | from scipy.stats import norm |
离线安装whl库文件
pip debug --verbose
查询当前python版本支持的whl标签pypi.org中搜索该模块的whl文件,下载对应适配的whl文件(Download filles如未支持低版本的python,可以去Release History中查看历史版本的whl文件)
对应的依赖模块whl也需要安装(注意安装顺序),如seaborn建立在matplotlib之上,并与pandas数据结构紧密关联。
将待安装whl放在C:/Python37/packages中,建一个requirements.txt文档,内容如下,并放在C:/Python37/Scripts文件夹下。
1
2scipy==1.1.0
seaborn==0.11.2pip install --no-index --find-links=C:\python37\packages -r requirements.txt
Done!
Linux
Console命令
1 | 查询两级目录下的文件结构,过滤文件类型doc/pdf/csv |
mv 移动文件
1 | mv [options] source dest |
- -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
- -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
- -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
- -n: 不要覆盖任何已存在的文件或目录。
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
rm 删除文件/文件夹/文件夹中内容
rm
- 代表删除-f
- 代表强制,例如,当您不想被询问/提示是否要删除archive时,它很有帮助。-r
- 代表递归,这意味着您要递归地遍历每个文件夹并删除所有内容。
1 | rm -rf "/path/to the/directory/" 删除文件夹及里面所有文件 |
tar 与zip
1 | tar.gz解压与压缩 |
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压 -xcf压缩
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压
使用tar xvf .tar.gz压缩包,出现以下报错:
1 | gzip: stdin: decompression OK, trailing garbage ignored |
step1: gunzip *.tar.gz 先解压为tar格式
step2: tar xvf *.tar 再将tar格式解压为文件夹
step3: tar zcf *.tar.gz Dir/ 再压缩为tar.gz格式,由tar.gz格式解压就不会报错了
tree命令参数
1 | tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...] |
- -a 显示所有文件和目录。
- -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
- -C 在文件和目录清单加上色彩,便于区分各种类型。
- -d 显示目录名称而非内容。
- -D 列出文件或目录的更改时间。
- -f 在每个文件或目录之前,显示完整的相对路径名称。
- -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上”*”,”/“,”=”,”@”,”|”号。
- -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
- -i 不以阶梯状列出文件或目录名称。
- -L level 限制目录显示层级。
- -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
- -n 不在文件和目录清单加上色彩。
- -N 直接列出文件和目录名称,包括控制字符。
- -p 列出权限标示。
- -P<范本样式> 只显示符合范本样式的文件或目录名称。
- -q 用”?”号取代控制字符,列出文件和目录名称。
- -s 列出文件或目录大小。
- -t 用文件和目录的更改时间排序。
- -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
- -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
多命令执行符号 | 格式 | 作用 |
---|---|---|
: | 命令1:命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1 && 命令2 | 当命令1正确执行,命令2才会执行;当命令1不正确执行,则命令2不会执行 |
ll | 命令1 ll 命令2 | 当命令1正确执行,命令2不会执行;当命令1不正确执行,则命令2才会执行 |
shell脚本语言
初步看了眼shell脚本语言,可读性比python差很多,再加上现在linux系统都预装了python2.x版本,python Best!
1 | chmod +x ./test.sh #使脚本具有执行权限 |
Windows文件/Word/Excel相关
Word删除空行 - word中操作
删除所有空行:”^p”替换为””
多个空行保留一个空行: “^p^p”替换为”^p”
Python输出文件的文件名在Window下的非法字符检查
1 | import re |