
python进阶
python进阶
LCY133
这个作者很懒,什么都没留下…
展开
-
问题求解:总计600人,每次刀一个奇数位的人,最后剩下谁的概率最高 暴力求解法
如题,总计600个人,每次刀一个奇数位的人,请问最后谁会活下来。要看谁能够最后剩下来,可以先生成一个600人的列表,按照index删掉一个人。原创 2023-10-18 13:28:20 · 585 阅读 · 1 评论 -
运行python脚本时传递参数
在运行 Python 脚本时,可以通过命令行参数传递参数。可以将参数存储在配置文件中,然后在脚本中读取配置文件。是自定义的参数,可以根据实际情况进行修改。模块来解析命令行参数。变量获取命令行参数。原创 2023-07-26 16:44:28 · 2904 阅读 · 0 评论 -
基于cyclonedx-conan和conan软件生成sbom
在执行 conan install . 时出现错误:ERROR: bom2/0.1: ‘settings.compiler.cppstd’ value not defined,此时需要改动文件conanfile.py。执行:cyclonedx-conan generate >sbom3.json。新建文件夹 generate,并且将新生成文件移动到该文件夹。改的是根目录下的conanfile.py 文件。原创 2023-07-20 18:54:15 · 757 阅读 · 2 评论 -
python 基于base64完成加密解密
加密解密基于base64库,无需再额外安装其他库。原创 2023-07-19 13:19:14 · 2247 阅读 · 0 评论 -
python基于crypto实现加密与解密
其中需要指定加密方式为CBC,补码方式为PKCS7,不过以下代码解密后的内容有部分为乱码,有待解决。原创 2023-07-19 09:38:13 · 6905 阅读 · 0 评论 -
python用于日志文件处理(文件读取 with open方式 readline识别是否读到末尾)
在测试中会遇到很多重复性的查日志的工作,这里用python会大大的提高工作效率,最近完成的一项工作就涉及了此类的工作背景:日志记录了信息帧的收发,我需要检查某一个寄存器的收发值,不过这一个个的查下来,恐怕我是要累吐血了,于是我就用上了python,让电脑替我干活……with open 和readline首先要读取文件,以with open的方式,这样可以在读完文件后关掉该文件,然后是readline,可以一行一行的读取,最后就是判断日志的内容了,日志内容非常规范,所以处理起来相对简单上代码:关原创 2020-12-01 14:24:48 · 3324 阅读 · 1 评论 -
python 语言TCP实践之ssh
import socketimport osimport timeserver = socket.socket()server.bind(('localhost',9999))server.listen()while True: conn,addr = server.accept() print('地址是',addr) while True: data = conn.recv(1024) if not data:原创 2020-08-04 00:54:07 · 169 阅读 · 0 评论 -
python 弱引用
del 弱引用class A:... def __del__(self):... print('del')... a = A()b = aa = Noneb = Nonedel#以上为只是重写了del方法,当A释放的时候执行delimport weakrefclass B:... def __del__(self):... print('del')... b1 = B()b2 = weakref.ref(b1)b1 = Non原创 2020-07-03 20:03:28 · 214 阅读 · 0 评论 -
垃圾回收 python实现
在Python程序运行的时候,会在内存中开辟一块空间,用于存放临时变量;当计算完成之后,就会将结果输出到永久性存储器中。如果数据量特别大,那内存空间管理不妥当的话就非常容易爆内存,程序可能直接终止。在Python中,一切皆对象。所以,每一个变量,实际上都是对象的一个指针。所以,当这个对象的引用计数(指针数)为0的时候,说明它也变成了垃圾,需要被放到回收箱中。当数据是局部变量时,在返回到函数调用处时,局部变量的引用会注销。这时,列表a所指代对象的引用数为0,Python便会执行垃圾回收,因此之前占用的内原创 2020-07-13 22:16:08 · 261 阅读 · 0 评论 -
Ubuntu16.04 下 python交叉编译的一些坑 比如:Command ‘lsb_release -a‘ returned non-zero exit status 1
配置:虚拟机:VMware workplace pro 15平台:Ubuntu16.04python:python 3.6.6ARM :明远智睿 核心板 my-imx-6ul编译链:arm-linux-gnueabihf在交叉编译的这一天:2020年8月8日 北京奥运会开幕12周年纪念日,整整一天 从凌晨5点到晚上23点 干的正事就这一个 除去其他的时间,在这件事上花了12+小时总在重复这个过程,试了Ubuntu18.04 和Ubuntu16.04两个版本 还是感觉16.04原创 2020-08-09 17:13:26 · 1571 阅读 · 0 评论 -
cannot import name 'multiarray' 问题的解决
@[ImportError: cannot import name ‘multiarray’ 问题的解决在安装numpy之后在终端进行import时发现居然出错,ImportError: cannot import name ‘multiarray’于是查询了多种博客,发现原来问题在于自己安装的python版本太多了,并未指定一个模块调用位置,我使用的是ubantu16.04,需要改动~/.b...原创 2018-12-17 12:10:55 · 5114 阅读 · 2 评论 -
python模块os.getpid 和os.getppid在多进程中的应用
python函数os.getpid可以获取当前进程的PID,python函数os.getppid 可以获取当前进程的主进程的PPID上代码:import osfrom multiprocessing import Processimport timedef main(): p1 = Process(target=demo1) p2 = Process(target=demo2) p1.start() p2.start() print('主进程')原创 2020-07-06 19:10:09 · 6591 阅读 · 0 评论 -
基于python 与TCP的文件下载器
在上一篇文章中完成了TCP通信的基本操作,本文中完成TCP的文件下载操作。客户端代码:import socketdef main(): #1.创建 tcp_client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) #2.ip port tcp_client.connect(('192.168.152.1',7892)) fileName = input('请输入要下载的文件名原创 2020-06-30 21:01:32 · 172 阅读 · 0 评论 -
嵌入式Linux环境下python编程实践之pyserial初步
import serialimport serialimport timeCom = 'com9'Baudrate = 38400Parity = serial.PARITY_EVENTimeout = 0.5#Parity = serial.PARITY_NONEBytesize = serial.EIGHTBITSserialFd = serial.Serial(port = Com,baudrate=Baudrate,parity=Parity)print(serialFd.nam原创 2020-09-07 17:20:03 · 988 阅读 · 0 评论 -
python程序在嵌入式linux系统运行。。
最近在写运行在嵌入式linux系统下的python程序。中间遇到很多坑,接下来我就一一说一下。从windows编写python脚本,然后将文件复制到嵌入式linux下,运行时报错:通过vi编辑器查看发现在每一行的后面都有一个^M,每一行都有我一看这要是把每一行的^M都去掉,那好几分钟过去了,很烦,而且这个事情在之前就遇到过几次,或者是shell脚本或者是txt文件,因为文件比较小,所以没在意,只是把符号去掉了事,结果遇见这么大的程序就该想想高科技的方式了。搜索时搜索到:https://www.jb原创 2020-07-14 17:58:36 · 2094 阅读 · 0 评论 -
多继承 查看继承顺序的‘__mro__’魔法方法
class D(object): passclass B(D): passclass C(D): passclass A(B,C): passprint(A.__mro__)可以通过__mro__魔法方法查看多继承的顺序原创 2020-07-04 15:17:44 · 232 阅读 · 0 评论 -
守护线程与主线程等待子线程
在执行完主线程后以上程序继续执行子线程的后续内容,并不会立刻退出:import threadingimport timedef main(): t1 = threading.Thread(target=demo1) t2 = threading.Thread(target=demo2) t1.start() t2.start()def demo3(): for i in range(3): print('----demo3----')d原创 2020-07-03 20:06:08 · 318 阅读 · 0 评论 -
蓝牙基站项目总结(主要涉及TCP 多线程 MQTT)
项目内容:编写转发程序,与TCP设备通讯,接收TCP设备的信息,进行相应的处理后,通过MQTT转发出去。细节:TCP通讯接收的是信息帧,16进制数据,转发出去的是json串涉及知识:TCP通讯,多线程,json解析,mqtt通讯TCP通讯:方式1:多线程函数方式实现收发方式2:通过继承threading.Thread,以类的方式实现多线程,在类中可以定义stop方法,在某个时间优雅的杀死该线程TCP通讯的socket开启与关闭还需要进行研究多线程的杀死需要研究TCP通讯时收到的信息帧为原创 2020-12-01 00:59:59 · 773 阅读 · 0 评论 -
python 函数中的全局变量使用(错误:UnboundLocalError: local variable ‘a‘ referenced before assignment)
遇到了错误:UnboundLocalError: local variable ‘a’ referenced before assignment代码:a = 1b = 2def test1(): print("a=",a) print("b=",b)def test2(): a += 1 b += 1def test3(): a = 3 print(a)test1()test2()test3()test1()这里test1函数只打印原创 2020-12-07 16:14:19 · 325 阅读 · 0 评论 -
嵌入式Linux上 python的第三方库Pyserial 的安装
参考:https://blog.youkuaiyun.com/zenglaoshi/article/details/1073761551)修改.bashrc文件cd ~vi .bashrc# 末尾输入export PYTHONPATH=$PYTHONPATH:/opt/python3/lib/python3.6/site-packages# 保存并退出 .bashrc3)运行:source .bashrc4)执行 5)tar xzvf pyserial-3.4.tar.gz # 解压6)cd ./p原创 2020-08-09 17:16:29 · 1643 阅读 · 0 评论 -
python 中的编码encode和解码decode
在学习tcp udp收发时踩了好多个坑,其中一个坑就是关于编码和解码的操作了。在这里编码:encode() 将字符按照编码格式编码2进制的操作解码:decode() 将2进制串按照解码格式解码成相应的字符的操作在进行通讯时,收发数据是按照2进制进行收发的,在发送数据之前,数据要先经过编码 encode()在通讯之后,收到的数据是2进制的,如果是汉字之类的如果不经过解码,print时看到的会是乱码,要经过decode() 按照相应的规则解码,才能打印出可以显示的字符关于utf-8和uni原创 2020-06-30 16:58:15 · 4499 阅读 · 0 评论 -
mysql与python实践之商品查找
实践要求:已有goods表,在此基础上完成查询“”"使用面向对象完成商品查询• 输入1:查询所有商品• 输入2:所有商品种类• 输入3:查询所有品牌• 输入4:退出• 输入5:插入数据“”"import pymysqlclass MB(object): def __init__(self): self.conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root',原创 2020-08-02 23:31:09 · 338 阅读 · 0 评论 -
python 多进程之进程池的操作
当需要创建的子进程数量不多时,可以直接利用 multiprocessing 中的 Process 动态生成多个进程, 但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到 multiprocessing 模块提供的 Pool 方法。也就是进程池。初始化 Pool 时,需要指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求,但是如果进程池中的进程已经达到指定的最大值,那么该请求 就会等待,直到池中有进程结束,才会用之前的进程来执原创 2020-07-07 21:00:30 · 456 阅读 · 0 评论 -
Ubuntu环境下交叉编译python3.6.6
编译环境虚拟机:VMware workplace pro 15平台:Ubuntu16.04python:python 3.6.6ARM :明远智睿 核心板 my-imx-6ul编译链:arm-linux-gnueabihf步骤1.下载安装包2.gcc编译和添加软连接3.交叉编译链配置4.交叉编译和打包5.解压到Linux环境,添加软连接问题与系统中的配置项1.下载地址:https://www.python.org/downloads/source/选择XZ格式的即可原创 2020-08-09 16:45:09 · 1650 阅读 · 0 评论 -
线程同步
任务介绍:实现:天猫精灵:小爱同学小爱同学:在天猫精灵:现在几点了?小爱同学:你猜猜现在几点了实现方式:一个类叫天猫精灵 一个类叫小爱同学 在两者里面分别加入说的话使用了上下文管理器from threading import Condition其中涉及到等待与唤醒两个方法等待和唤醒必须成对出现,通过等待和唤醒可以让两个线程进行通讯,可以让两个线程中的某些语句交替执行,实现了线程之间的通讯等待:self.cond.wait()唤醒:self.cond.notify()sel原创 2020-07-05 18:35:16 · 251 阅读 · 0 评论 -
批量修改文件名 python实现
对于某些评书的音频文件,我想要进行相关的修改和重命名,如果一个个的右键修改,那恐怕要累吐血了,于是,找到python中的os模块,进行重命名,然后简单的就完成了#coding=gbkimport osimport sysdef rename(): path='D:\BaiduNetdiskDownload\单田芳_薛家将www.yigushi.com\单田芳_薛家将' name='薛家将' startNumber= '1' fileType='.mp3' pr原创 2021-01-04 11:05:45 · 246 阅读 · 2 评论 -
列表的加法 a=a+b和 a+=b有什么区别
这两者貌似结果是一样的,但是实际的运行结果却大相径庭直接上代码:def add(a,b): #a = a + b a+=b #可变数据类型 在原有的数据地址上进行了拼接 return adef add2(a,b): a = a + b #此时的意义是将a b的内容进行拼接之后赋给了另一个叫做a的地址,两个变量的名称相同但是是一个不同的地址 #a+=b return aa = [1,2]b = [3,4]print('1. id(a)原创 2020-07-13 23:00:06 · 445 阅读 · 0 评论 -
python实现死锁和重入锁
在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。import threadingimport timeclass MyThread1(threading.Thread): def run(self): # 对mutexA上锁 mutexA.acquire() # mutexA上锁后,延时1秒,等待另外那个线程 把mutexB上锁 print(self.name+'----do1-原创 2020-07-05 17:45:41 · 333 阅读 · 0 评论 -
多态和鸭子类型
鸭子类型:多态的概念是应用于Java和C#这一类强类型语言中,在使用一个变量时需要指定这个变量的类型;而Python崇尚"鸭子类型"动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。我觉得可迭代对象这个变量的出现就非常重要比如extend这个方法,只要传入的是可迭代对象就可以使用这个方法a = [1,2]b = [3,4]c = (5,6)d =原创 2020-07-04 09:46:27 · 248 阅读 · 0 评论 -
python 多线程 互斥锁和死锁
在上一节提到的资源抢占的问题,那么这个问题如何解决呢?互斥锁就可以解决这个问题:资源抢占的问题原因在于两个线程操作同一个资源,此时这个资源的内容就混乱了,对于两个线程都不能正常服务此时就可以考虑在一个线程工作的时候,将线程锁定,其他线程无法访问,这就是互斥锁当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制某个线程要更改共享数据时,先将其锁定,此时资源的状态为"锁定",其他线程不能改变,只到该线程释放资源,将资源的状态变成"非锁定",其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线原创 2020-07-05 16:10:36 · 263 阅读 · 0 评论 -
多进程之间共享全局变量 python实现
线程之间是可以正常共享全局变量的,因为是共用同一片空间的,而进程之间所使用的是不同的内存空间所以线程之间可以共享全局变量,因为共用一片空间不同进程使用不同的空间,所以使用的资源本质上是不同的,所以一片空间上的变量变化了不会影响另一个空间的资源变化。通过代码来对比2者的区别:多线程实现:import threadingimport timenum = 100def demo1(): global num num += 100 print(f'----demo1---nu原创 2020-07-07 00:53:28 · 9170 阅读 · 1 评论 -
在大量创建类时减少内存消耗 python实现
问题背景:在游戏开发中,有一个玩家类Player,每有一个在线玩家,在服务器内则有一个player的实例,当在线的人数很多时,将产生大量实例(百万级)解决方向:在实例化时,支持动态绑定的__dict_字段占用了很大的空间,如果要把dict去掉,加入__slots_ 声明实例中有哪些属性,即可关闭动态绑定而且悉知实例中的属性代码:class Player(object): def __init__(self, uid, name, status): self.uid = uid原创 2020-07-14 14:48:41 · 344 阅读 · 0 评论 -
python实现TCP与UDP的几点区别
以client的实现为例:区别体现在client = socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM)client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)socket中的type参数是不同的,第2点:data = client.recv(1024)data = client.recvfrom(1024)TCP使用的是recv 而UDP原创 2020-12-01 16:23:00 · 188 阅读 · 0 评论 -
基于python的日志分析程序(解压缩 按关键字抽文件和日志行)
1.过程:解压文件并复制文件到指定的位置解压缩.gz的文件:使用gzip例程:import osimport reimport gzipimport shutil# 解压文件filePath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\home\\npsdk\log\\npsdk\\'objPath = 'E:\\0.TLBOX文件整理\\17.千里眼测试\DS测试\9.18\\'fileList = os.listdir(path=filePath)原创 2021-09-23 17:58:50 · 598 阅读 · 0 评论 -
python time函数的使用 获取文件的修改时间的时间戳和当前时间戳
获取当前时间时间戳:import timeprint(time.time())获取文件路径的操作:path = u"D:\python_code\ARM"for root, dir, files in os.walk(path): for file in files: full_path = os.path.join(root, file)其中os.walk(path)说明参见:https://www.cnblogs.com/machangwei-8/p/10725原创 2020-08-19 16:58:57 · 1190 阅读 · 1 评论 -
python serial 在init中实例化过一次串口,再次实例化时会出现问题吗?
内容为:测试重复实例化serial是否会出问题结果,会出问题,需要在再次实例化前先关闭接口,在初始化时已经打开过一次,再次实例化相当于再打开一次,此时需要先将原来的端口关闭,再打开具体代码如下:import serialimport timeclass RS485(object): def __init__(self): self.comname = 'com10' self.baudrate = 19200 self.parity =原创 2020-09-10 09:04:34 · 791 阅读 · 0 评论 -
进程池之间通信 python 实现
进程池间的通信:使用语句:multiprocessing.Manger().Queue()步骤:1.创建队列通信2.创建进程池3.给进程池添加任务,任务函数的参数为队列通信4.进程池关闭不再接受其他任务5.阻塞主线程import multiprocessingdef main(): #1.创建队列通信 queue = multiprocessing.Manager().Queue() #2.创建进程池 pool = multiprocessing.Pool原创 2020-07-07 20:59:52 · 424 阅读 · 0 评论 -
进程和多进程实现多任务
进程定义进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。并且进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程概念• 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。• 进程是一个“执行中的程序”。• 进程是操作系统中最基本、重要的概念。进程与程序区别• 进程:正在执行的程序。动态的,暂原创 2020-07-06 10:36:16 · 277 阅读 · 0 评论 -
基于python实现 TCP服务器与客户端的通讯
TCP协议:提到TCP,就会有其显著的特点:三次握手 全双工其三次握手的具体内容形象的一个说法就像两个很客气的人加完了好友之后的反应:A: 我可以加你为好友吗?B:可以呀,我可以加你为好友吗?A:可以呀然后就开始没羞没臊的聊天。(我记得11-12年那会的QQ确实是这样,双方都有选择是否加对方为好友的选项)在添加好友之后客户端和服务器之间进行的消息交互是全双工的,有发送有应答(如果有发送没有应答会怎么样?如果程序设置成没有应答也是没问题的,但是这样就不是TCP的协议了啊!)客户端原创 2020-06-30 17:54:29 · 1484 阅读 · 0 评论 -
python 中的socket简介
sockettcpudp计算机网络的发展和寄出网络软件开发架构应用类的web类的:浏览器 百度 知乎C/S架构 Client/server 客户端服务器模式Server:服务器一直运行 等待别人的访问Client:客户端可以不一直运行B/S 架构 Browser/Sever 浏览器服务器模式Browser: 浏览器Server: 服务器B/S架构经常用于PC端 设置统一入口统一入口:B/S架构的应用..原创 2020-06-25 14:17:32 · 248 阅读 · 0 评论