Python学习笔记

Python学习笔记

Part 随手记

str.isalpha() 判断当前字符串是否是英文字母
str.isspace() 判断当前字符串是否是空格
str.isdigit() 判断当前字符串是否是数字


isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True

isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。


zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。


python的h5py库
HDF5 for Python
The h5py package is a Pythonic interface to the HDF5 binary data format.

HDF5 lets you store huge amounts of numerical data, and easily manipulate that data from NumPy. For example, you can slice into multi-terabyte datasets stored on disk, as if they were real NumPy arrays. Thousands of datasets can be stored in a single file, categorized and tagged however you want.


Python endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。
语法
str.endswith(suffix[, start[, end]])
参数
suffix – 该参数可以是一个字符串或者是一个元素。
start – 字符串中的开始位置。
end – 字符中结束位置。
返回值
如果字符串含有指定的后缀返回True,否则返回False。


Python lower() 方法转换字符串中所有大写字符为小写。
str.lower()


importlib.import_module动态导入模块

├── clazz
│   ├── __init__.py
│   ├── a.py
│   └── b.py
└── main.py
import importlib

# 绝对导入
a = importlib.import_module("clazz.a")
a.show()
# show A

# 相对导入
b = importlib.import_module(".b", "clazz")
b.show()
# show B

getattr(object, name[, default])
getattr() 函数用于返回一个对象属性值。

>>>class A(object):
...     bar = 1
... 
>>> a = A()
>>> getattr(a, 'bar')        # 获取属性 bar 值
1
>>> getattr(a, 'bar2')       # 属性 bar2 不存在,触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'bar2'
>>> getattr(a, 'bar2', 3)    # 属性 bar2 不存在,但设置了默认值
3
>>>

[::-1] 顺序相反操作
[:-1] 从位置0到位置-1之前的数


python中可哈希的数据类型,即不可变的数据结构(数值类型(int,float,bool)字符串str、元组tuple、自定义类的对象)。

不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)。


字母的大小写对应的ASCII码相差为32
python基础(1) - ASCII码的转换及字母的大小写转化


Python 正则表达re模块之findall()详解

Part1 字符串操作

一些操作只是改变了显示,记得赋值操作

 -     str1+str2  #字符串进行拼接
 -     str*n  #字符串重复显示n次
 -     len #字符串长度
 -     字符串.split()   #根据括号内间隔符对字符串切分
 -     字符串1.join(字符串2)   #字符串1与2的合并
 -     字符串.replace('str1','str2')    #把字符串中str1换为str2
 - 	   字符串.upper()  #把字符串内容改为大写
 -     字符串.lower()  #把字符串内容改为小写
 -     字符串.strip()   #删掉字符串首尾空白
 -     字符串.lstrip()  #删掉字符串左边空白
 -     字符串.rstrip()  #删掉字符串右边空白
 -     '{} {} {}'.format('str1','str2','str3')  #将str参数传递,可在{}内标号确定传递位置,也可指定参数传递
 -     字符串 = '%s %f %d' % {str,float,int}    #参数传递

Part2 Python索引

python索引是从0开始的;
可通过负数进行从后往前索引(从-1开始);
也可通过[n:n+a]进行切片操作(左闭右开的区间),[n:]代表从n开始右边全取,[:n]代表从左边开始取到n,[::n]代表每隔n个字符取一次

Part3 Python List结构(列表结构)

  • 通过[]创建list结构,里面可以放任何类型且无长度限制
  • len(list([])) #可以打印list长度
  • list可加法操作拼接,可乘法操作重复复制
  • list结构也可以像python索引并进行替换赋值操作
  • del list[n:n+a] 可以进行删除操作
  • list.count[‘a’] 对list中的a进行计数
  • list.index[‘a’] 对a在list中的位置进行索引
  • list.append(‘’) 对list中添加东西,一次只能添加一个元素
  • list.extend() extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
  • list.insert(n,‘’) 在list的n位置插入元素
  • list.remove(‘’) 在list中删除元素
  • list.pop(n) 弹出n元素并进行显示和在list中删除操作
  • list.sort() 对list元素进行排序,list改变
  • list1 = sorted(list) 对list进行排序,list不改变,list1为排序后输出
    #默认为从小到大排序,可通过**(reverse = True)**进行从大到小排序
  • list.reverse() 对list中元素进行颠倒顺序

list = range(start, stop, step)
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0,5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0,1,2,3,4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

Part4 Python字典

dict = {} 定义字典 key—value,一个键对应一个值 key一般用字符串,value什么类型值都可以
dict[‘a’] = 123 在字典dict中赋值,键值a对应值123 如:dict = {‘a’:123}
字典索引只能拿键值key去索引,不能用index索引
dict.get(‘a’) = dict[‘a’]
dict.pop(‘a’) 弹出当前key值’a’
del dict[‘a’] 删除key值’a’
dict1.update(dict2) 用dict2中的key值更新dict1
dict.keys() 打印所有的key值
dict.values() 打印所有的value值
dict.items() 打印所有key与其对应的value值

Part5 Python集合

list = set(list) 集合保留下列表中唯一的元素,去除重复字符
{} 写key—value对是字典,不写是集合
set1.union(set2) or set1 | set2 求集合1与集合2的并集
set1.intersection(set2) or set1 & set2 求集合1与集合2的交集
set1.difference(set2) or set1 - set2 求集合1关于集合2的差异
set2.issubset(set1) or set2<=set1 判断集合2是否是集合1的子集,输出为bool值
set.add() 在集合中添加元素
set.update() 在集合中更新元素
set.remove() 在集合中删除元素
set.pop() 在集合中弹出元素,从左边开始弹出

Part6 赋值机制

a is b :a与b的id相同 id——内存指向
a = b : a与b的值相同
为了提高内存的利用效率,对于值比较小的数字采用重用方式,id相同;对于数值比较大的数字指向不同内存,id不同

Part7 判断结构

4个空格 = 一个Tab = 一个缩进

if 事件1 :
	print('1')
elif 事件2print('2')
else 
	print('3')

Part8 循环结构

# 定义一个[1:10]的列表——while
b = []
a = 1
while a <= 10:
	b.append(a)
	a += 1
print(b)
# 定义一个[1:10]的列表——for
b = [1]
list = range(2,11)
for i in list:
	b.append(i)
print(b)		
  • break 语句用于跳出 for 和 while 循环过程,跳出后对应的 else 部分将不执行。
  • continue 语句用于跳过 for 和 while 循环中的本次循环,其后的语句在本次循环中将不再执行,同时程序将执行下一轮循环。
  • pass语句主要用于占位,表示“这里没有要执行的内容”

Part9 Python函数

封装操作

def function(参数1,参数n):   #定义一个函数名字,参数可以默认指定,在后面函数调用时可修改参数
	1.#直接写逻辑事件,默认不返回参数
	
	2.#写完逻辑事件 ,返回值可以多个
	return 参数 
function()

def function(sum,*args):   #指定不定参数个数
	for i in args:
		sum += i
	return sum
function(1,4,5,6,...)

def function(sum,**kwargs):    #传递进字典参数结构,必须是一个键值对
	for key,value in kwargs.items():
		print(key,value)
function(1, x=m, y=n)

Part10 Python包

Python是一个脚本语言

#已构建好pack.py,在别的.py文件中想用这个文件中的函数function
import pack
pack.function()  #从pack中调用function

import pack as pk     #修改为别名导入

from pack import function #直接从包中导入函数,不用调用
function()

from pack import *  #把pack包中的所有东西都导入

import os #操作系统中工具
os.remove('pack.py')  #删除导入的包

Part11 异常处理模块

异常处理模块,如果发生错误不报错,执行别的事件
可以通过类和继承自己定义一种异常

class Error(ValueEror):
	pass

if 异常:
	raise Error(事件)   #抛出异常,让程序停下来
try:    #捕捉
	执行事件 
except Error:  #Error改为发生的异常类型,可以通过多个except分析多个类型异常情况
	执行另一个事件
except Exception: #不用判断哪种类型的异常
	执行另一个事件

finally:   #关键字,在遇到异常之前会执行finally,保护文件;如果没有遇到异常也会执行finally
	事件

Part12 Python文件操作

读文件

txt = open('./txt文件名字')   #./当前路径
lines = txt.readlines()    #type(lines) is list  每行读取添加到list中  \n换行符
for line in lines:
	print('line:',line)
txt.close()   #关闭文件

写文件

txt = open(txt,'w')   #'w'  删除原来内容,重新写    'a' 追加模式,指针在文件末尾
txt.write('要写的内容')
txt.close()   #在文件读写过程中,要写完或者读完 .close()

with open('./txt文件名字','w') as f:   #不用close
	f.write('要写的内容')   
符号代表含义
r以只读的方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件只用于读。文件指针将会放在文件的开头。
r+打开文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会写入到已有的内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会写入到已有的内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。在文件打开时会使用追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

Part13 Python类

类:面向对象

class cls:
	'帮助信息:xxxx'
	定义初始值
	def __init__(self, 指标1, 指标2):  #初始化的方法,构造函数
		self.指标1 = xxx
		
	def function()
	
cls.__doc__   #打印帮助信息
cls.__name__	#打印类的名字
cls.__module__	#打印类的定义所在模块  __main__
cls.__bases__	#类的副类构成元素
cls.__dict__	#字典结构:类的组成
cls1 = cls(指标1, 指标2)	#构造cls
cls1.function()   #调用cls中的函数function
hasattr(cls1, '指标1')   #查看cls1中是否有指标1
getattr(cls1, '指标1')    #获取cls1指标1对应信息
setattr(cls1, '指标1', '指标1+')    #修改cls1指标1对应信息	
delattr(cls1, '指标1')        #删除属性

父类子类与继承

class Parent:
	number = 100
	def __init__(self):
		print('调用父类构造函数')
	def ParentM(self):
		print('调用父类方法')
	def setAttr(self, attr):
		Parent.parentAttr = attr
	def getAttr(self):
		print('父类属性:', Parent.parentAttr)
	def newM(self):
		print('父类要被重写的方法')

class Child(Parent):  #定义子类继承父类
	def __init__(self):
		print('调用子类构造函数')
	def ChildM(self):
		print('调用子类方法')
	def newM(self):
		print('子类改掉父类')

c = Child()
c.ChildM()
c.ParentM()
c.setAttr(100)
c.getAttr()
c.newM()

输出:
调用子类构造函数
调用子类方法
调用父类方法
父类属性: 100
子类改掉父类

Part14 时间操作

import time
time.time()
time.localtime(time.time())
time.asctime(time.localtime(time.time()))
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
time.sleep()

Part15 Python实现文件和文件夹的操作

import shutil
import os

#创建文件夹
def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)
        print(path + ' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(path + ' 目录已存在')
        return False


def remove_file(old_path, new_path):
    print(old_path)
    print(new_path)
    filelist = os.listdir(old_path)  # 列出该目录下的所有文件,listdir返回的文件列表是不包含路径的。
    print(filelist)
    for file in filelist:
        src = os.path.join(old_path, file)
        dst = os.path.join(new_path, file)
        print('src:', src)
        print('dst:', dst)
        shutil.move(src, dst)


for i in range(1, 81):
    #创建文件夹
    mkpath = 'F:\\ProgramData\\object\\deep_sort\\gaofenchallenge\\train\\' + str(i) + '\\det'
    mkdir(mkpath)
    # 复制某个文件到文件夹下,并重命名
    oldpath = 'F:\\ProgramData\\trainData\\Multi-object-tracking-trainData\\gt\\'
    newpath = 'F:\\ProgramData\\object\\deep_sort\\gaofenchallenge\\train\\' + str(i) + '\\gt\\gt.txt'
    #shutil.copy(oldpath + str(i) + '.txt', newpath)
    # 移动文件夹下所有文件到新的文件夹
    oldpicpath = 'F:\\ProgramData\\trainData\\Multi-object-tracking-trainData\\video\\' + str(i) + '\\img'
    newpicpath = 'F:\\ProgramData\\object\\deep_sort\\gaofenchallenge\\train\\' + str(i) + '\\img1'
    #remove_file(oldpicpath, newpicpath)

Part16 Python实现修改文档内容并生成新文档

如MOT数据集中根据gt生成det

import os


def gt2det(path, path1):
    file = os.listdir(path)

    for filename in file:
        with open(path+filename, "r+") as f:
            for line in f:
                a = line.split(",")
                frame, id, x0, y0, w, h, cl = int(a[0]), int(a[1]), float(a[2]), float(a[3]), float(a[4]), float(
                    a[5]), int(a[7])
                b = 'det.txt'
                q = open(os.path.join(path1, b), "a")
                q.writelines(str(frame) + ',' + '-1' + ',' + str(x0) + ',' + str(y0) + ',' + str(w) + ',' + str(
                    h) + ',' + '1' + ',' + '-1' + ',' + '-1' + ',' + '-1' '\n')
                q.close()


for i in range(1, 81):
    gtpath = './' + str(i) + '/gt/'
    detpath = './' + str(i) + '/det'
    gt2det(gtpath, detpath)

Part17 Python os模块

Python os 模块详解
Python OS 文件/目录方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习DePeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值