Python
Rocky Ding*
全网同名Rocky Ding,AIGCmagic社区创始人,自媒体WeThinkIn主理人,AIGC算法专家,持续分享AI行业前沿资讯、干货经验以及深度思考,欢迎社招/校招/实习面试咨询。
展开
-
Python_Python删除文件操作
在深度学习研究和工程应用中,我们经常需要制作数据集,对数据集进行清洗,排除脏数据,这时候就需要用到Python的删除文件操作了。我们必须导入 OS 模块,并运行其 os.remove() 函数。我们直接举一个例子:# 假设removefile是一个set,我们将想要删除的数据路径存在里面for file in removefile: if os.path.exists(file): # 这一步判断这个数据是否真的存在本地。若是,则删除;若不是,则跳过。 os.remove(f原创 2021-03-11 21:16:12 · 610 阅读 · 0 评论 -
python_优化互换变量小技巧
在Python中,当我们想要互换两个变量的值或将列表中的两个值交换时,我们可以使用如下的格式进行,不需要创建临时变量:x, y = y, x那么这么做的原理是什么呢?首先一般情况下Python语句是从左到右解析一个语句的,但在赋值操作的时候,因为是右值具有更高的计算优先级,所以需要从右向左解析。对于上面的代码,它的执行顺序如下:先计算右值y , x(这里是简单的原值,但可能会有表达式或者函数调用的计算过程), 在内存中创建元组(tuple),存储y, x分别对应的值;计算左边的标识符,元组被分原创 2021-02-11 15:42:59 · 250 阅读 · 0 评论 -
Python_sys.argv参数详解
[argv]是[argument variable]参数变量的简写形式,一般在命令行调用的时候由系统传递给程序。这个变量是一个List,argv[0]表示“被调用的脚本文件名或全路径”;argv[1]就是传入的系统命令参数。我们举个例子:nohup python test.py > log.txt "hello world" 2>&1 &上面的脚本执行语句中,sys.argv[1]获取的是“hello world”这个参数;而sys.argv[0]获取的是test.py原创 2020-12-17 10:25:32 · 825 阅读 · 0 评论 -
Python_将不同文件夹中的特定文件复制到同一个文件夹中并修改每个文件的名称(Python代码实现)
下面的代码中,path是我们想要找的文件的上两级目录,new_dirs是我们最后将所有文件保存的目录,我们使用shutil库来实现我们的文件复制,在这里我们使用的是文件名后缀规则来约束我们想要选取的文件,不同情况可以使用不同的规则,但是模版就是这样。import shutilfrom os.path import joinfrom os import listdir# 打开文件path = "xxx"dirs = listdir(path)new_dirs = "xxx"for files原创 2020-12-07 18:02:54 · 923 阅读 · 0 评论 -
Python_可迭代对象、迭代器和生成器
可迭代对象可迭代对象是迭代器、生成器和装饰器的基础。简单来说,可以使用for来循环遍历的对象就是可迭代对象。比如常见的list、set和dict。我们来看一个例子:from collections import Iterableprint(isinstance('abcddddd', Iterable)) # str是否可迭代print(isinstance([1,2,3,4,5,6], Iterable)) # list是否可迭代print(isinstance(123456原创 2020-10-07 19:02:00 · 329 阅读 · 0 评论 -
Python_装饰器
装饰器本质上还是一个函数,它可以让已有的函数不做任何改动的情况下增加功能。接下来我们使用一些例子来具体说明装饰器的作用:如果我们不使用装饰器,我们通常会这样来实现在函数执行前插入日志:def foo(): print('i am foo') def foo(): print('foo is running') print('i am foo')虽然这样写是满足了需求,但是改动了原有的代码,如果有其他的函数也需要插入日志的话,就需要改写所有的函数,这样不能复用代码。原创 2020-10-07 15:41:16 · 265 阅读 · 0 评论 -
Python_全局解释器锁GIL
GIL概念Python代码的执行由Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。 对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。在多线程环境中,Python虚拟机按以下方式执行:设置GIL。切换到一个线程去执行。运行:a.指定数量的字节码指令,或者b.线程主动让出控制(可以调用time.sleep())原创 2020-10-06 22:26:11 · 293 阅读 · 0 评论 -
Python_Pickle的优势详解
Pickle比起普通的file在存取类型和读取速度(更高效)这两方面有优势。在Python以及其他主流语言中,将对象序列化是比较麻烦的,我们要将对象自行编码,分割成串,然后存入文件。反序列化,即读取,恢复成对象时,要解码,截取串,还原成对象。而使用Pickle中的dump和load,就可以轻松实现。Pickle可以把数据结构转换成字节串,可以保存到文件,方面下次快速恢复读取,也可以通过网络方便传输。Pickle可以保存任何数据格式的数据,在经常存取的场景(保存和回复状态)下读取效率更加高效。file原创 2020-09-15 22:07:14 · 1522 阅读 · 0 评论 -
Python_numpy的broadcasting机制
Python的numpy库是一个非常有用的数学计算库,其broadcasting机制给我们的矩阵运算带来了极大地方便。我们先看下面的一个例子:>>> import numpy as np>>> a = np.array([1,2,3])>>> aarray([1, 2, 3])>>> b = np.array([6,6,6])>>> barray([6, 6, 6])>>> c =原创 2020-09-02 10:31:02 · 390 阅读 · 0 评论 -
Python_numpy库数组的类型、尺寸、形状、维度等相关属性查看
>>> import numpy as np>>> a = np.array([1,2,3,4],dtype=np.complex128)>>> aarray([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])>>> type(a) #数组数据类型<class 'numpy.ndarray'>>>> a.dtype #数组元素数据类型dtype('complex128')原创 2020-08-20 17:39:45 · 5455 阅读 · 0 评论 -
Python_assert介绍
Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。我们直接看一些例子:>>> assert True >>> assert FalseTraceback (most recent call last): File "<stdin>", line 1, in <module>AssertionError原创 2020-08-20 17:34:12 · 238 阅读 · 0 评论 -
Python_使用np.mean计算矩阵的均值
>>> import numpy as np>>> a = np.array([[2,2],[4,4],[6,6]])>>> aarray([[2, 2], [4, 4], [6, 6]])>>> mean = np.mean(a) # 将上面二维矩阵的每个元素相加除以元素个数(求平均数)>>> mean4.0>>> mean2 = np.mean(a,原创 2020-08-19 14:38:39 · 8757 阅读 · 0 评论 -
Python_文件名模式匹配方法
使用字符串方法.startswith() 和 .endswith() 是两个非常有用的寻找特定扩展名文件的方法。for f_name in os.listdir('some_directory'): if f_name.endswith('.txt'): print(f_name)使用fnmatch进行简单文件名模式匹配字符串方法匹配的能力是有限的。fnmatch 有对于模式匹配有更先进的函数和方法。我们将考虑使用 fnmatch.fnmatch() ,这是一个支持使用转载 2020-08-14 11:26:56 · 7846 阅读 · 0 评论 -
Python_遍历目录和处理文件
我们可以使用os.walk()从上到下或从下到上遍历树来生成目录树中的文件名。例如目录树的结构如下:├── folder_1│ ├── file1.py│ ├── file2.py│ └── file3.py├── folder_2│ ├── file4.py│ ├── file5.py│ └── file6.py├── test1.txt└── test2.txtos.walk()默认是从上到下遍历目录的:os.walk()在每个循环中返回三个值:当原创 2020-08-14 10:03:55 · 185 阅读 · 0 评论 -
Python_复制、移动和重命名文件和目录
我们可以使用Python附带的shutil模块来完成。复制文件我们可以使用shutil.copy()来将文件从一个位置复制到另一个位置:import shutilsrc = 'XXX/XXX/file.txt'dst = 'XXX/XXX/XXX/dir'shutil.copy(src, dst)shutil.copy() 与基于UNIX的系统中的 cp 命令相当。 shutil.copy(src,dst) 会将文件 src 复制到 dst 中指定的位置。 如果 dst 是文件,则该文件原创 2020-08-14 00:23:31 · 377 阅读 · 0 评论 -
Python_常见文件操作详解
打开和关闭文件open函数a = open(参数1, 参数2, 参数3)各个参数的细节如下:参数1是一个包含了你要访问的文件名称的字符串值。参数2决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。参数3如果被设为0,就不会有寄存。如果参数3的值取1,访问文件时会寄存行。如果将参数3的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。不同模式打开文件的完全列表:模式描述原创 2020-08-13 20:29:47 · 499 阅读 · 0 评论 -
Python_测试集制作:从一个文件夹中随机抽取一定量的图片和同名label.txt文件并移动到另一个文件夹中
import osimport randomimport shutilimport sysdef movefile(filedir, tardir): pathdir = os.listdir(filedir) # 取数据集的原始路径 filenumber = len(pathdir) rate = 0.5 # 自定义抽取数据集的比例,比方说1000张抽100张,那就是0.1 picknumber = int(filenumber * rate) # 按照r原创 2020-08-13 16:17:24 · 1104 阅读 · 2 评论 -
python_*args和**kwargs详解
*args 和 **kwargs 主要用于函数定义。 你可以将不定数量的参数传递给一个函数。这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。*args*args 是用来发送一个非键值对的可变数量的参数列表给一个函数。我们直接看一个例子:def test_var_args(f_arg, *argv): print("first normal arg:", f_arg) for arg in argv: print原创 2020-08-13 15:34:39 · 203 阅读 · 1 评论 -
Python_numpy.argsort函数
该函数将会返回数组排序后的对应索引(从小到大)。我们直接看具体例子:import numpy as np x = np.array([3,1,2,5,3]) print(np.argsort(x)) x2 = np.array([[0,1,3], [3,2,5]]) print(np.argsort(x2)) # 默认是左右比较 print((np.argsort(x2, axis=0))) # 上下比较 print((np.argsort(x2,原创 2020-08-06 23:29:50 · 218 阅读 · 0 评论 -
Python_判断变量是否为None以及None的相关知识
与C不同的是,在python中是没有NULL的,取而代之的是None,它的含义是为空,但要注意和空列表与空字符串是不一样的,None的类型是Nonetype:>>>a=None>>>type(a)<class 'Nonetype'>另外,None是没有像len,size等属性的,要判断一个变量是否为None,直接使用:if a is None:再者,注意None与布尔类型的区别,布尔类型只包括两个:True和False(注意它的大小写)但py转载 2020-08-04 12:02:21 · 1204 阅读 · 0 评论 -
Python_albumentations常用的图像增强方法详解
albumentations库源亮度和对比度物体在图像中的清晰度取决于场景照明和相机灵敏度。通过随机增加或减少图像亮度来增加输入图像的虚拟变化,改善了网络的照明不变形。对比度就是图像中最暗和最亮区域之间的分隔。通过随机增强来增加这个范围有助于增加对阴影的不变形,并且通常会提高网络在低光照条件下的性能。from albumentations import ( Compose, RandomBrightnessContrast)aug = Compose([RandomBrightn转载 2020-08-02 14:03:32 · 4988 阅读 · 0 评论 -
Python_使用openCV对图像数据进行读取&&处理
OpenCV是一个跨平台的计算机视觉库。其发展非常早,拥有众多的计算机视觉、数字图像处理和机器视觉等功能,OpenCV是今天介绍得所有图像库中最全面也最强大的库,学习成本也相对要高很多。使用cv2.imread读取图片将其储存为一个BGR像素值矩阵。接下来我们看看相关的代码操作:import cv2 # 导入OpenCV库import numpy as npimg = cv2.imread('xxx.jpg', 0) # 读取图片:灰度模式img = cv2.imread('xxx.jpg原创 2020-08-02 00:25:56 · 1480 阅读 · 0 评论 -
Python_使用Pillow(PIL)进行图像数据读取&&处理
PIL即Python Imageing Library,而Pillow是PIL的一个分支。Pillow提供了常见的图像读取和处理的操作,它比opencv更为轻巧,而且可以与ipython notebook无缝集成。使用Image.open()读取图片存储为一个对象,并非是numpy矩阵。下面我们看看相关的代码操作:from PIL import Image #导入PIL库import numpy as npimg = Image.open('../xx.jpg') # 读取图片imgL =原创 2020-08-01 23:34:44 · 15087 阅读 · 0 评论 -
Python_列表、元组、字符串相互转换
我们直接上代码:字符串和元组转换成列表:example1 = '6666666'print(example1)print(type(example1))list1 = list(example1)print(list1)print(type(list1))example2 = (1, 2, 3, 4, 5)print(example2)print(type(example2))list2 = list(example2)print(list2)print(ty原创 2020-07-24 00:37:29 · 350 阅读 · 0 评论 -
Python_通过读取图片和txt文件信息制作Wideface格式的kpl数据集所需的标签txt文件
最近由于我的一个模型需要Widerface格式的数据集,所以我对手里的数据集进行处理。首先想要制作Widerface格式数据集,就要有一个包含所有图片标注信息的txt文件。而这个代码就是帮助我们制作这个文件的。我手里的数据是每个数据有单独的标注信息txt文件,txt文件里的信息格式也和Widerface格式不一样,下面是我手里的数据标注信息(除开头0以外的第一和第三个数除以图片的宽,第二和第四个数除以图片的高):0 0.317357512953 0.3515625 0.0336787564767 0.原创 2020-07-23 20:28:17 · 687 阅读 · 0 评论 -
Python_enumerate()函数详解
enumerate()函数功能: enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。我们直接看例子:>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']>>> list(enumerate(seasons))[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter原创 2020-07-23 17:01:48 · 225 阅读 · 0 评论 -
Python_获取文件的文件名和后缀名(扩展名)
我们可以使用os.path.splitext(file)[0]获得文件名。我们可以使用os.path.splitext(file)[-1]获得以.为开头的文件后缀名。接下来我们看一个例子:import osfile = "hello world.py"# 获取前缀(文件名称)print(os.path.splitext(file)[0])# 获取后缀(文件类型)print(os.path.splitext(file)[-1])print(os.path.splitext(file)[原创 2020-07-23 16:22:13 · 3177 阅读 · 0 评论 -
Python_math函数库常用函数详解(持续更新)
floor()函数功能:floor() 返回数字的向下取整数。输入参数: x-数值表达式。例子:import math print("math.floor(-45.17) : ", math.floor(-45.18))print("math.floor(100.12) : ", math.floor(100.16))print("math.floor(100.72) : ", math.floor(100.74))print("math.floor(math.pi) : ", mat原创 2020-07-22 18:07:59 · 662 阅读 · 0 评论 -
Python_使用opencv获取图像尺寸(高,宽,深度)
直接上代码:import cv2image = cv2.imread('xxx.jpg')size = image.shapew = size[1] #宽度h = size[0] #高度print(size)print(w)print(h)-------结果如下---------(512, 772, 3)772512原创 2020-07-21 17:36:29 · 61011 阅读 · 2 评论 -
Python_使用opencv在图像上画矩形框
直接上代码:import cv2image = cv2.imread('/../../xxx.jpg')cv2.rectangle(image, (232, 198), (258, 162), (0, 0, 255), 2)cv2.imwrite('xxx.jpg', image)其中cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)函数的参数解释:(img为原图,左上角坐标,右下角坐标,线的颜色,线宽)...原创 2020-07-21 16:55:12 · 4779 阅读 · 1 评论 -
Python_删除TXT文件中不想要的内容
直接上代码(我们这个代码是将新的文件复制出来,不会修改原文件):file = open("../../..TXT文本路径", "r") # 以只读模式读取文件lines = []for i in file: lines.append(i) #逐行将文本存入列表lines中file.close()new = []for line in lines: # 逐行遍历 p = 0 #定义计数指针 for bit in line: # 对每行进行逐个字遍历 if bit == " 0 ": #原创 2020-07-20 00:09:35 · 8464 阅读 · 0 评论 -
Python_Python中[:n],[n:],[-1],[:-1],[::-1],[1:],[4::-1]的含义详解
[:n][:n]代表列表中的第一项到第n项。我们看一个例子:example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[:6])---------结果---------[1, 2, 3, 4, 5, 6][n:][n:]代表列表中第n+1项到最后一项example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(example[6:])---------结果---------[7, 8, 9,原创 2020-07-17 18:59:05 · 9997 阅读 · 2 评论 -
Python_使用Python将一个文件夹下的多个文件夹中的图片复制到一个文件夹中(代码)
我们直接上代码:# coding=utf-8import osimport shutil#目标文件夹,此处为相对路径,也可以改为绝对路径determination = '/../../目标文件夹/'if not os.path.exists(determination): os.makedirs(determination)#源文件夹路径path = '/../../源文件夹'folders = os.listdir(path)for folder in folders:原创 2020-07-14 16:39:52 · 5805 阅读 · 6 评论 -
Python_Class(类)和对象的相关知识点详解
面向对象结束的一些术语类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。局部变量:定义在方法中的变量,只作用于当前实例的类。原创 2020-06-20 15:14:10 · 892 阅读 · 0 评论 -
Python_代码的封装大法
1.什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其含义是其他程序无法调用。要了解封装,离不开“私有化”,就是将类或者是函数中的某些属性限制在某个区域之内,外部无法调用。2.什么要封装封装数据的主要原因是:保护隐私(把不想别人知道的东西封装起来)封装方法的主要原因是:隔离复杂度(比如:电视机,我们看见的就是一个黑匣子,其实里面有很多电器元件,对于用户来说,我们不需要清楚里面都有些元件,电视机把那些电器元件封装在黑匣子里,提转载 2020-06-20 11:34:26 · 3275 阅读 · 0 评论 -
Python_变量、对象以及函数传参解析
变量和对象在Python中,一个变量可以说是内存中的一个对象的“标签”或“引用”。比如a = 1:现在变量a指向了内存中的一个int型的对象(a相当于对象的标签)。如果给a重新赋值,那么标签a将会移动并指向另一个对象,如下图所示a = 2:原来的值为1的int型对象仍然存在,但我们不能再通过a这个标识符去访问它了(当一个对象没有任何标签或引用指向它时,它就会被自动释放)。如果我们把变量a赋值给另外一个变量b,我们只是给当前内存中对象增加一个“标签”而已b = a:所以在Python中变量只是原创 2020-06-10 22:54:47 · 309 阅读 · 0 评论 -
Python_Everything is Object in Python
Python使用对象模型来存储数据,任何类型的值都是一个对象。所有的Python对象都有3个特征:身份、类型和值。身份:每一个对象都有自己的唯一的标识,可以使用内建函数id()来得到它。这个值可以被认为是该对象的内存地址。类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。type()函数可以用来查看Python对象的类型。值:对象表示的数据。...原创 2020-06-10 22:35:04 · 212 阅读 · 0 评论 -
Python_赋值、浅拷贝以及深拷贝
赋值(assignment)在Python中,用一个变量给另一个变量赋值,其实就是给当前内存中的对象增加一个“标签”而已。看下面的例子:>>> a = [6, 6, 6]>>> b = a>>> print(id(a), id(b), sep = '\n')44924244484492424448可以看出,其实a和b指向内存中同一个对象。>>> a is bTrue浅拷贝(shallow copy)浅拷贝是指原创 2020-06-10 21:31:58 · 183 阅读 · 0 评论 -
Python_range函数和xrange函数的区别
xrange函数和range函数首先,xrange函数和range函数的用法完全相同,不同的地方是xrange函数生成的不是一个list对象,而是一个生成器。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟很大的内存空间。具体如下所示:Python 2.7.15 | packaged by conda-forge | (default, Jul 2 2019, 00:42:22) [GCC 4.2.1 Compatible Clang 4.0.1 (ta原创 2020-06-05 19:44:44 · 321 阅读 · 0 评论 -
Python_Python修改全局变量
x = 8def function(): global x x = 100 print(str(x)) #打印全局变量xfunction()由上面的代码可知,想要修改全局变量,只需要在函数里面将全局变量标记为global即可。原创 2020-06-03 22:46:41 · 919 阅读 · 0 评论