Python Note

本文深入探讨Python编程中的实用技巧,包括字符串处理、数据结构操作、文件读写、异常处理及常用库如numpy、matplotlib的使用方法,适合Python开发者进阶学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:是本人在编程过程中的小笔记,常更新。Python3.4

*安装software软件时超时情况:pip3 --default-timeout=600 install -U software

* #!/usr/bin/env python作为脚本第一行,像运行普通程序一样运行脚本。#是python中注释。
*String.endswith(suffix[,start[,end]]) 检查字符串是否以suffix结尾,还可使用索引start和end来指定匹配范围。
*字符串类型格式化采用format()方法,基本使用格式是: str.format(<逗号分隔的参数>)。基本语法是通过 {} 和 : 来代替以前的C++中的 %。数字格式化方法,”{:,.2f}”.fomat(3.1415)=3.14。
*if __name__ == '__main__':就相当于是 Python 模拟的程序入口。__name__是系统内置变量,代表所在模块名字,也即所在文件名。所在文件冒号后面的代码会被执行,因为主程序中,__name__的值为“__main__”。的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行,当.py文件以模块形式被导入时,if __name__ == '__main__'之的代码块将不被运行。
*要打开文件,可使用函数 open ,并向它提供一个文件名。如果要确保即便发生错误时文件也将被关闭,可使用 with 语句。打开文件时,还可指定模式,如 'r' (读取模式)或 'w' (写入模式)。通过在模式后面加上 'b' ,可将文件作为二进制文件打开,并关闭Unicode编码和换行符替换。要从文件中读取行,可使用 readline 和 readlines ;要写入行,可使用 writelines 。
*语句块通过且只能通过缩进来表示。
*基本的用户交互:要提示用户输入并获取这些输入,可使用内置函数input,x = float(input("Please enter a number:")).函数input显示提示语(可选),并让用户输入一个字符串。
*x[:3]意味着从列表开头到第4个元素(不含)之间的所有元素,x[3:]则意味着从第4个元素(含)开始到最后一个元素(含)的所有元素, x[-3]从列表末尾往前数的第3个元素。[:-i] [::-1]的理解:[:-i]表示从0倒数第i位(不包含);[::-1]表示逆序。
*range(start, stop[, step]):计数从 start 开始,默认是从 0 开始range(5)等价于range(0,5);计数到 stop 结束,但不包括 stop, step:步长,默认为1。
*int(x, base=10): x-字符串或数字,base–进制数,默认十进制,返回整型数据。
*reversed( ) --方法用于返回逆向迭代序列的值,
*enumerate()方法生成由二元组(元素数量为二的元组)构成的一个迭代对象,每个二元组是由可迭代参数的索引和对应的元素组成
*命令行传入参数如下:  import sys       sys.argv[1]
*----------------------------------------------------------------------------------
**类的第一个字母大写,使用关键字class来定义类,像这样来调用方法: object.method(arg1, arg2),方法和成员变量(属性)都是不受保护的。
*构造函数(constructor),其实就是初始化方法,只是命名为 __init__
__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去。实质上就是初始化参数,此时创建实例时必须填上参数。
*Class定义类:每个定义的类都有一个特殊的方法,名为__init__(),可以通过这个方法控制如何初始化对象。
基本形式:
class Athlete:
   def __init__(self):
          …..................
   def function(self,item):
         …..................
class允许继承,如class Runner(Athlete):,且支持多重继承
__init__是Class中的构造函数,即初始化

python中导入(import)一些模块的作用
os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台(如 nt 或 posix)中的特定函数间自动切换,从而能实现跨平台操作
os.path: 主要用于获取文件的属性
os.getcwd():查看当前所在路径
os.listdir(path):列举目录下的所有文件。返回的是列表类型
os.path.exists(path):文件或文件夹是否存在,返回True 或 False, 如果存在删除os.remove(path)
os.path.splitext(pathfile):分离文件名与扩展名,返回[文件名,扩展名]
os.path.expanduser(path):把path中包含的"~"和"~user"转换成用户目录
s.path.join()函数:连接两个或更多的路径名组件 .如果各组件名首字母不包含’/’,则函数会自动加上.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾
os.rename(src, dst):给文件或文件夹改名字,将src改成dst
sys:负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
   sys.argv 命令行参数List,第一个元素是程序本身路径
   sys.exit(n) 退出程序,正常退出时exit(0)
   sys.stdout 标准输出
   sys.stdin 标准输入
io:提供了多个流式处理接口
pickle:可以序列化对象(通常是训练好的模型)并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作,dumps, dump,loads,load;
pickle.dump(obj,file,protocol=None,*,fix_imports=True):将对象obj保存到文件file中,等同于Pickler(file,protocol).dump(obj)
      protocol:整型,协议版本号,支持的版本号为0到HIGHEST_PROTOCOL,如果没有指定,默认为DEFAULT_PROTOCOL。如果指定为负数,则为HIGHEST_PROTOCOL。
       file:obj将要写入的文件对象,file必须以二进制可写模式打开,即“wb”,该file参数必须有write()方法,该方法能够接受单字节的参数。
pickle.load(file,*,fix_import=True,encoding="ASCII",errors="strict"):从file中读取一个字符串,并将它重构为原来的python对象
       file:必须以二进制可读模式打开,即“rb“,其余为可选参数,有read()和readline()接口
time:提供了大量对时间进行处理的方法,
numpy:提供了python对N维数组对象的支持;
numpy中常用的函数:
numpy.mean(a, axis, dtype, out,keepdims)mean()函数功能:求取均值,经常操作的参数为axis,以m*n*k矩阵举例:axis不设置值,对 m*n个数求均值,返回一个实数;axis = 0:压缩行,对各列求均值,返回 1* n*k 矩阵;axis =1:压缩列,对各行求均值,返回 m *k 矩阵.axis=(0,1)返回1*k矩阵。
numpy.squeeze 函数:从数组的形状中删除单维度条目,即把shape中为1的维度去掉
numpy.sum(x,axis,dtype,out): x为输入矩阵,当axis=0时求每列的和最后压缩成一行,axis=1压缩成一列。
numpy.random.rand():据给定维度生成[0,1)之间的数据,括号里表示维度参数
numpy.random.randn(d0,d1,…,dn):返回一组样本,具有标准正态分布,括号里表示维度
numpy.random.choice(a, size=None, replace=True, p=None):从一维array a 或 int 数字a 中,以概率p随机选取大小为size的数据,replace表示是否重用元素,即抽取出来的数据是否放回原数组中,默认为true(抽取出来的数据有重复)
numpy.random.normal(loc=0.0,scale=1.0,size=None):正态分布,中心loc,size数量多少
numpy.expand_dims:用于扩展数组的形状
math:提供了许多对浮点数的数学运算函数.
collections: Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
    namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
    deque: 双端队列,可以快速的从另外一侧追加和推出对象
    Counter: 计数器,主要用来计数
    OrderedDict: 有序字典
    defaultdict: 带有默认值的字典
dlib库:机器学习的开源库,包含了机器学习的很多算法,使用起来很方便,直接包含头文件即可,并且不依赖于其他库,是一个使用现代C++技术编写的跨平台的通用库。
提取特征的函数:dlib.get_frontal_face_detector()    #人脸特征提取器,
CNN提取特征的函数:cnn_face_detector = dlib.cnn_face_detection_model_v1(cnn_face_detection_model)
glob库:文件名模式匹配,不用遍历整个目录判断每个文件是不是符合。for name in glob.glob('dir/*'):dir文件夹下所有文件。
Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。scipy.io   # 数据输入输出.
scipy.io.loadmat('test.mat'): 读写.mat文件
scipy.misc.imsave('test.png',im):将数组im直接保存为图像文件形式test.png
scipy.misc.imread(name, flatten=False, mode=None)将图片像素和通道读取出来返回array类型即numpy类型
scipy.misc.imresize(image, size, interp='bilinear', mode=None)改变图像大小并且隐藏归一化到0-255区间的操作,能将图片重采样为指定像素.image:图片的数组形式,size只对原图的第0和第1维度的size做改变,可以是以下值1)int 整数的时候是原图像的百分比,
 2)float浮点数的时候是原图像的分数 3)tupe元组的时候是直接定义输出图像的长和宽与原图的大小无关。interp: 是一个可选的参数,是调整图像大小所用的插值的方法,分别有最近邻差值,Lanczos采样放缩插值,双线性插值,双三次插值,三次插值('nearest', 'lanczos', 'bilinear', 'bicubic', 'cubic')。
python中一些内置的函数
reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

*----------------------------------------------------------------------------------------------------------------
**python中的异常处理:try...except, raise
1.try...except:用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
2.try...finally:无论是否发生异常都将执行最后的代码
3.raise:自己触发异常
*--------------------------------------------------------------------------------------------------------------------------
*python支持一种数据结构的基本概念名为容器(container)。容器基本上是可包含其他对象的对象,两种主要容器是序列(列表[]和元组())和映射(字典{})。在序列中,每个元素都有编号,在映射中,每个元素都有名称(也叫key)。还有一个既不是序列也不是映射的容器,是集合set。
python中(),[],{}:
小括号():代表tuple元祖数据类型,元祖是一种不可变序列;
中括号[]:代表list列表数据类型,列表是一种可变序列;
花括号{}:代表dict字典数据类型,字典是Python中唯一内建的映射类型。字典中的值没有特殊的顺序,但都是存储在一个特定的键(key)下。键可以是数字、字符串甚至是元祖。格式如下:{key1:value1,key2:value2,key3,value3,......},每个key对应一个value,对应用':'表达,每个键值之间用逗号分割。{}也表示集合,但没有字典的对应形式。通常用{}创建一个空集表示的是字典而非集合。

*python的tuple,list,dict,se
对于tuple:元组中的元素值是不允许修改的不能插入和删除修改里面元素,但可以对元组进行连接组合tup3 = tup1 + tup2;元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组.内置函数如下:
cmp(tuple1, tuple2):比较两个元组元素。
len(tuple):计算元组元素个数。
max(tuple):返回元组中元素最大值,min(tuple):返回元组中元素最小值。
tuple(seq):将列表转换为元组
对于List: 基本的数据结构,序列中的每个元素都分配一个数字 - 位置或索引.
lists = ['Michael', 'Bob', 'Tracy']
lists.append('Adam')    //添加在末尾,没有add()方法
lists.insert(1, 'Jack') //添加在指定位置
lists.extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来列表)
lists.pop(1)            //在指定位置删除,参数是索引
del lists[1]             //删除第二个元素
lists.remove('Bob')     //参数是元素,删除第一个与Bob值匹配的元素,之后又相同元素不会删除
lists.clear()      清空 list                                         lists.copy()      将 list 复制出来
lists.reverse()      将 list 反转                                lists.sort()      将 list 排序
lists.extend()      list 拼接                                      lists.index('xxx')      找 xxx 元素的的下标
in/not in      判断某元素是否在 list 内,返回布尔值
lists[::num]      切片                                            len(lists)      返回 list 的长度
对于dict: 字典的每个键值对用冒号分割,每个键值对之间用逗号分割,查找速度快,无序,键必须是唯一的。
dicts= {'a': 'A', 'b': 'B'}
del dicts['a']
dicts.pop('a')    //参数是key,没有remove()方法
dicts['c']='C';   //插入直接赋值即可
str(dicts):输出字典可打印的字符串表示。
dict.clear()删除字典内所有元素
dict.copy()返回一个字典的浅复制
dict.fromkeys(seq[, val])创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dict.get(key,default=None)返回指定键的值,如果指定的值不存在,则返回该默认值
dict.has_key(key)如果键在字典dict里返回true,否则返回false
dict.items()以列表返回可遍历的(键, 值) 元组数组
dict.keys()以列表返回一个字典所有的键
dict.update(dict2)把字典dict2的键/值对更新到dict里
dict.values()以列表返回字典中的所有值
pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem()返回并删除字典中的最后一对键和值。
对于set:set是一个无序不重复元素集, 可用于消除重复元素。
可使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { }是用来创建一个空字典
s={1,2,3}       //set对象的创建也可以是s=set(iterable)
s.add(x)        //添加8到末尾   没有append()方法
s.remove(x)  ts.discard(x)    //参数是元素,不是索引,删除8,没有返回值 ,discard删除没有的元素时不会报错
s.pop()         //删除最后一个元素
支持union(并或|), intersection(交或&), difference(差或-)和sysmmetric difference(对称差集或^,返回两个集合中不重复的元素)等数学运算.
s.clear()    移除集合中的所有元素
s.copy()    拷贝一个集合
s.difference()    返回多个集合的差集
s.intersection()    返回集合的交集
isdisjoint()    判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset()    判断指定集合是否为该方法参数集合的子集。
issuperset()    判断该方法的参数集合是否为指定集合的子集
pop()            随机移除元素
remove()    移除指定元素
symmetric_difference()    返回两个集合中不重复的元素集合。
union()    返回两个集合的并集
update()    给集合添加元素
A,b,*c=[1,2,3,4]; *表示收集多余的值,无需确保值和变量个数相同。

把集合转换成列表: a=set(), b=list(a), 转成列表后即可取其中元素。
*-----------------------------------------------------------------------------------------------------------------
python的for-in循环结构,经常用于遍历字符串、列表,元组,字典等,通常有单独和内嵌两种方式。
1. 单独的,for i in list:   接下一行是语句, 逐句操作。2, 内嵌,语句 for i in list, 通常要加[]括号。返回的是一个序列集合。
*-----------------------------------------------------------------------------------------------------------------
assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。语法: assert expression, assert expression [, arguments]    等价于:if not expression:     raise AssertionError
**Python的heapq库提供了堆队列算法的实现,也就是优先级队列算法.堆本身是二叉树,每个父节点的值小于等于它的任何子节点.使用优先级队列的好处有:能够任意顺序增加对象,并且很容易找到最小元素,于min函数相比,效率会高些
heapq.heappush(heap,item):将item推入heap中
heapq.heappop(heap): heappop 返回的是序列heap中的第一个元素,也就是最小的一个元素
heapq.heappushpop(heap,item):pop出heap中最小的元素,推入item
heapq.nlargest(n, iterable[, key]):返回迭代数据集合iterable中第n大的元素
heapq.nsmallest(n, iterable[, key]): 回迭代数据集合iterable中第n小的元素
*-------------------------------------------------------------------------------------------------------------
* <<,~,=,&,^符号的意义(与C++相同)
<<是按位左移运算,~是按位取反运算,=是赋值运算,&是按位与(只有对应的二个二进位都为1时,结果位就为1),^二进制的异或运算(如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0)。 1<<n,表示左移n位,乘以2^n, >>右移n位,除以2^n.其余位补0.以上计算都是二制运算,先把数字转换成二制,再进行按位运算。
*在python中没有&&及||运算符的,使用and和or,以及not代替。
*--------------------------------------------------------------------------------------------------------------
*python读写txt等文件
从第11行到倒数第一行读文件并输出:
with open('data.txt') as f:
        for line in  f.readlines()[11:len(f.readlines())-1]:
                print(line)

将文本、数字distance、字典path等写入文件
   f = open("path.txt",'w+')
   f.write('distance='+str(distance)+'\n')
   f.write(str(path))
   f.close() #注意文件必须关闭,否则无法写入

sys.path.append(os.pardir)  # 导入父目录的文件(即导入上一级目录中的文件)

*--------------------------------------------------------------------------------------------------------------
python中导入图片相关:
法一:利用PIL中的Image函数,这个函数读取出来不是array格式,这时候需要用 np.asarray(im) 或者np.array()函数区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝。PIL(Python Image Library)是python的第三方图像处理库,用于图像归档、图像展示、图像处理。
    from PIL import Image
    import numpy as np
    Img = Image.open('1.png')
    Img.show()    
    Img.save('save.png')
    Img_array = np.array(I)
    print I_array.shape

法二:利用matplotlib.pyplot as plt用于显示图片: matplotlib.image as pltimg 用于读取图片,并且读取出来就是array格式。Matplotlib 是Python中类似 MATLAB 的绘图工具
    import matplotlib.pyplot as plt
    import matplotlib.image as pltimg
    import numpy as np
    Img = pltimg.imread('1.png')
    print Img.shape
    plt.imshow(Img)

法三:利用opencv-python接口: cv2.imread()读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的
    import cv2
    Img = cv2.imread('1.png')
    print Img.show(Img)
*--------------------------------------------------------------------------------------------------------------

*---------------------------------------------------------------------------------------------------------------
**python中psycopy2,详见https://blog.youkuaiyun.com/xranmail/article/details/85111290
类cursor:允许Python代码在数据库会话中执行PostgreSQL命令,由psycopy2.connect.cursor() 创建,它在整个周期中都绑定到connection,并且在由连接包装的数据库会话的上下文中执行所有命令
*execute(query, vars=None):执行一个数据库操作;
* fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 , 则返回 None
    cur.execute("select user,password from user where user='%s'" %name)
    arr= cur.fetchone()   ----此时 通过 arr[0],arr[1]可以依次访问user,password
* fetchall() :   返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ()
*copy_to(file, table, sep='\t', null='\\N', columns=None):将表的内容写入像文件一样的文件中
*copy_from(file, table, sep='\t', null='\\N', size=8192, columns=None):从文件中读取数据,将它们附加到名为表中,
 参数:file:类似于文件对象的东西来读取数据,必须同时拥有read()和readline()方法
        table:将要复制到的表格的名字          sep:文件中的列分隔
        null:null的文本表示                         size:用于从文件读取的缓冲区的大小
columns:以columns名称迭代,长度和类型应该与要读取的文件的内容匹配。如果未指定,则假定整个表与文件结构相匹配        
*conn.commit()#将任何挂起的事务提交到数据库,这句来提交事务,要不然不能真正的插入数据
*conn.close()#用于关闭连接,以防止下面紧接着有另外的 查询会产生冲突的

python开发者的110道面试题及答案:https://www.cnblogs.com/lmx123/p/9230589.html

python的一些发行版本
CPython 属于 Python 参考实现方案,可算是所有其他 Python 衍生发行版的一套标准化版本。CPython 利用 C 语言编写而成,而其编写者包含多位 Python 语言顶级决策层中的核心人员。CPython 在优化方面表现得最为保守。当然,这并不是缺点,而是设计取向。Python 的维护者们希望将 CPython 打造为 Python 最具广泛兼容性与标准化的实现方案。CPython 最适合对 Python 标准的兼容性与一致性要求较高的用户。此外,CPython 同样适用于希望以最基本方式使用 Python并愿意为此放弃某些便捷性的专业人士。
Anaconda 源自 Anaconda 公司,设计目标在于服务那些需要由商业供应商提供支持且具备企业支持服务的 Python 开发者。Anaconda Python 的主要用例包括数学、统计学、工程、数据分析、机器学习以及其他相关应用。Anaconda 捆绑有 Python 商业与科学使用场景当中的各类常用库——包括 SciPy、NumPy 以及 Numba 等等,同时通过一套定制化软件包管理系统提供更多库访问能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值