关于python:限定源端口访问目标

限定源端口拜访指标1.1. 起因在浸透测试时,客户须要对咱们的测试IP进行加白,然而此次客户要求准确到固定端口或者小范畴端口(不能1-65535),依据以前的教训,默认是加白IP和全端口,因为代理建设连贯应用的端口是随机的,所以这次算是从头查找材料总结一下各种指定源端口的形式。 这里的端口是指与指标建设连贯时应用的源端口,而不是代理监听的端口。1.2. 留神最好应用服务器(VPS)发送申请。如果在局域网外向外网发动申请,即便本机指定了端口,也杯水车薪,因为理论发出请求的是最外层网络设备。 1.3. 办法一:NC# 指定12345端口,毛病是一次一用,比拟麻烦nc <IP> <Port> -p 12345 1.4. 办法二:批量占用端口查找了很多材料,但都没能找到适合的工具。最终我想到了一种蠢笨的办法:强制占用所有可用的端口。这样当代理发动申请时,就会主动抉择未被占用的端口。python代码举例如下: import socketimport time# 要占用的端口范畴start_port = 1end_port = 60000# 创立套接字socks = []for port in range(start_port, end_port+1): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('0.0.0.0', port)) sock.listen(1) socks.append(sock) except: print(f"{port} 被其余利用占用")print(f'已占用端口范畴: {start_port} - {end_port}')# 长期占用端口while True: time.sleep(60)成果如下,可见都是60000后的端口连贯。 1.5. 办法三:手动实现代理转发本人实现一个代理。监听一个端口,而后将流量发送到代理中,再由代理去固定源端口发送申请并返回后果。 Warning 因为都是走的这个端口去建设连贯,一旦出现异常状况,那这个端口可能会长期保持TIME_WAIT状态从而导致无奈失常应用。 python代码如下: import http.server # 导入HTTP服务器相干的模块import socketserver # 导入socket服务器相干的模块import http.client # 导入HTTP客户端相干的模块import urllib.parse # 导入URL解析相干的模块import socket # 导入socket相干的模块from loguru import logger # 导入日志库LISTEN_PORT = 8080 # 本地监听端口CONNECT_PORT = 22333 # 用于建设代理服务器与指标服务器连贯的本地端口# 继承http.server.BaseHTTPRequestHandler类,实现代理服务器的申请解决class ProxyRequestHandler(http.server.BaseHTTPRequestHandler): # 解决CONNECT办法 def do_CONNECT(self): # 解析URL u = urllib.parse.urlparse('http://' + self.path) # 建设一个新的套接字 p_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将该套接字绑定到本地端口 p_sock.bind(('0.0.0.0', CONNECT_PORT)) # 建设连贯 p_sock.connect((u.hostname, u.port or 80)) # 返回200连贯已建设响应 self.wfile.write(b'HTTP/1.1 200 Connection Established\r\n\r\n') # 将该套接字设置为非阻塞模式 p_sock.setblocking(False) self.connection.setblocking(False) while True: try: # 从代理服务器接收数据 data = self.connection.recv(1024) if not data: break # 将数据发送到指标服务器 p_sock.sendall(data) except: pass try: # 从指标服务器接收数据 data = p_sock.recv(1024) if not data: break # 将数据发送到代理服务器 self.connection.sendall(data) except: pass # 敞开连贯 self.connection.close() p_sock.close() # 解决GET办法 def do_GET(self): # 解析URL u = urllib.parse.urlparse(self.path) # 创立一个HTTP连贯 conn = http.client.HTTPConnection(u.hostname, port=u.port or 80, timeout=10, source_address=('0.0.0.0', CONNECT_PORT)) # 发送HTTP申请 conn.request(self.command, self.path, headers=self.headers) # 获取HTTP响应 resp = conn.getresponse() # 发送HTTP响应头 self.send_response(resp.status) for header, value in resp.getheaders(): self.send_header(header, value) self.end_headers() # 发送HTTP响应体 while True: data = resp.read(1024) if not data: break self.wfile.write(data) # 解决POST办法 def do_POST(self): # 解析URL u = urllib.parse.urlparse(self.path) # 获取申请体长度 content_len = int(self.headers.get('Content-Length', 0)) # 读取申请体 content_len = int(self.headers.get('Content-Length', 0)) # 获取申请体长度 body = self.rfile.read(content_len) # 读取申请体数据 conn = http.client.HTTPConnection(u.hostname, port=u.port or 80, timeout=10, source_address=('0.0.0.0', CONNECT_PORT)) # 创立 HTTP 连贯对象 conn.request(self.command, self.path, body=body, headers=self.headers) # 发送 HTTP POST 申请 resp = conn.getresponse() # 获取响应对象 self.send_response(resp.status) # 发送 HTTP 响应状态码 for header, value in resp.getheaders(): # 遍历响应头部信息 self.send_header(header, value) # 发送响应头部信息 self.end_headers() # 完结响应头部信息的发送 while True: data = resp.read(1024) # 依照每次读取 1024 字节的形式获取响应数据 if not data: # 如果读取结束,跳出循环 break self.wfile.write(data) # 将响应数据写入连贯,响应给客户端if __name__ == '__main__': try: # 创立一个 TCPServer 对象,绑定到 0.0.0.0:LISTEN_PORT 的地址,用于监听来自客户端的连贯申请,当有连贯申请时,将应用 ProxyRequestHandler 类进行解决。 httpd = socketserver.TCPServer(('0.0.0.0', LISTEN_PORT), ProxyRequestHandler) logger.info(f"Proxy server is listening on port {LISTEN_PORT}") # 开始监听并承受来自客户端的连贯申请,直到呈现 KeyboardInterrupt 异样为止 httpd.serve_forever() except KeyboardInterrupt: httpd.server_close()成果如下,均为22333端口。 ...

May 10, 2023 · 2 min · jiezi

关于python:抖音-用户id转uid

本文所有教程及源码、软件仅为技术钻研。不波及计算机信息零碎性能的删除、批改、减少、烦扰,更不会影响计算机信息零碎的失常运行。不得将代码用于非法用处,如侵立删!用户id转uid环境win10Python3.9PyQt5成果抖音id转sec_uiddef get_sec_uid(self, un_id):    headers = {        "Accept": "application/json, text/plain, /",        "Referer": "https://www.douyin.com/",        "Accept-Language": "zh-CN,zh;q=0.9",        "Proxy-Tunnel": str(random.randint(1, 10000))  # 设置IP切换头   }    response = requests.get(url, headers=headers)    print(response.text)    user_info = response.json()    if not user_info:        return None    sec_uid = user_info.get("sec_uid")    nickname = user_info.get("nickname")    return sec_uid, nicknamesec_uid转uiddef get_uid(self, sec_uid):    headers = {            "Host": "imdesktop.douyin.com",            "Accept-Language": "zh-CN",            "Sec-Fetch-Dest": "empty",            "Sec-Fetch-Mode": "cors",            "Sec-Fetch-Site": "cross-site",            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ????/1.0.6 Chrome/104.0.5112.102 Electron/20.1.0-tt.4.release.main.4 TTElectron/20.1.0-tt.4.release.main.4 Safari/537.36",            "accept": "application/json, text/plain, /",            "bd-ticket-guard-version": "1",            "referer": "https://imdesktop.douyin.com",            "sdk-version": "2",            "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"104\"",            "sec-ch-ua-mobile": "?0",            "sec-ch-ua-platform": "\"Windows\"",            "x-tt-disable-sessionid": "1",       }    response = requests.get(url, headers=headers)    print(response.text)    user_info = response.json()    if not user_info:        return None    uid= user_info.get("uid")    return uid资源下载https://download.csdn.net/download/qq_38154948/87769887链接:https://pan.baidu.com/s/19WE7lI85uFzhUuwzEzJLDA?pwd=0oi2 提取码:0oi2本文仅供学习交换应用,如侵立删! ...

May 10, 2023 · 2 min · jiezi

关于python:Python与SQLAlchemy轻松管理数据库

在这篇文章中,咱们将学习如何应用Python和SQLAlchemy库来轻松治理数据库。SQLAlchemy是一个弱小的ORM(对象关系映射)库,它容许您通过Python代码与关系型数据库进行交互,而无需编写SQL语句。 一、装置SQLAlchemy首先,确保您曾经装置了Python。而后,应用以下命令装置SQLAlchemy库: pip install sqlalchemy二、创立数据模型在开始应用SQLAlchemy之前,咱们须要创立一个数据模型来示意咱们的数据。例如,假如咱们有一个简略的应用程序,须要存储用户信息。咱们能够创立一个User类来示意用户数据: from sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) email = Column(String)这里,咱们首先从SQLAlchemy中导入所需的类和函数,而后创立一个User类,它继承自Base。咱们定义了一个表名users,以及示意用户数据的列。 三、设置数据库连贯接下来,咱们须要设置一个数据库连贯。在这个例子中,咱们将应用SQLite数据库,但SQLAlchemy反对多种数据库系统。创立一个名为database.py的文件,并增加以下代码来设置数据库连贯: from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom model import Base, UserDATABASE_URL = 'sqlite:///users.db'engine = create_engine(DATABASE_URL)Base.metadata.create_all(engine)Session = sessionmaker(bind=engine)session = Session()这里,咱们导入了之前创立的User类以及一些其余SQLAlchemy组件。咱们指定了一个SQLite数据库文件users.db,而后创立了一个连贯引擎。咱们还创立了一个Session类,用于与数据库进行交互。 四、CRUD操作当初咱们曾经设置好了数据库连贯,咱们能够执行一些根本的CRUD操作。以下是一些示例: 创立(Create) 要增加新用户,咱们能够创立一个新的User对象,而后将其增加到会话中: new_user = User(name='John Doe', age=30, email='john.doe@example.com')session.add(new_user)session.commit()读取(Read) 若要从数据库中查问用户,咱们能够应用session.query()办法: users = session.query(User).all()for user in users: print(user.name, user.age, user.email)更新(Update) ...

May 10, 2023 · 1 min · jiezi

关于python:0基础学爬虫爬虫基础之自动化工具-Pyppeteer-的使用

大数据时代,各行各业对数据采集的需要日益增多,网络爬虫的使用也更为宽泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前曾经推出不少爬虫进阶、逆向相干文章,为实现从易到难全方位笼罩,特设【0根底学爬虫】专栏,帮忙小白疾速入门爬虫,本期为自动化工具 Pyppeteer 的应用。概述前两期文章中曾经介绍到了 Selenium 与 Playwright 的应用办法,它们的性能都十分弱小。而本期要讲的 Pyppeteer 与 Playwright 统一,都能够作为 Selenium 的替代者来应用。且与 Playwright 相比,Pyppeteer 的应用更加简略。 Pyppeteer 的应用介绍在上上期文章中,咱们介绍了 Selenium 暗藏特色的办法,其中应用到了 stealth.min.js 文件。在介绍文件的起源时咱们提到了 Puppeteer,Puppeteer是一个基于 Node.js 的自动化工具。而这期要将的 Pyppeteer 就是 Puppeteer 的 Python 版。 Pyppeteer 是一个应用 Python 语言封装的 Google Chrome 浏览器的非官方 API。它能够用来进行自动化测试、网站爬虫和数据抓取等工作。 Pyppeteer 的底层是通过调用 Chrome 浏览器的 DevTools Protocol 接口来实现的。DevTools Protocol 是一个基于 WebSocket 协定的近程调试接口,能够让开发者管制和查看 Chrome 浏览器的行为。Pyppeteer 利用这个接口实现了对 Chrome 浏览器的齐全管制,包含加载页面、模仿用户操作、获取页面内容等等。 Pyppeteer 反对 Python 3.6 及以上版本,并且能够在 Windows、macOS 和 Linux 等操作系统上运行。它提供了简略易用的 API,能够不便地模仿用户在浏览器上的操作,例如点击链接、填写表单、触发事件等等。同时,它也反对对浏览器的调试、截屏、PDF 导出等高级性能。 Pyppeteer 的应用形式与其余 Python 库相似,能够通过 pip 包管理器进行装置。除了 Pyppeteer 自身外,还须要装置 asyncio 库和一个兼容的 Chrome 浏览器版本。在装置实现后,能够通过 Python 代码来管制浏览器的行为,实现各种自动化测试或数据抓取的工作。 ...

May 9, 2023 · 2 min · jiezi

关于python:python-开发者注意错位时空下不要用-id-判断两个对象是不是同一个

正确用法: a = "haha"b = aassert id(a) == id(b)正确的用法二: a = "haha"b = "haha"assert id(a) == id(b)谬误用法: a = "haha"a = "haha"assert id(a) == id(a)为什么是谬误的? 参考官网文档:library functions: id还有这个 issue:为什么id(GreenThread)总是雷同的?

May 9, 2023 · 1 min · jiezi

关于python:用Python实现简单的图像识别

在这篇文章中,咱们将应用Python和TensorFlow来实现一个简略的图像识别零碎。咱们将应用经典的MNIST数据集,这是一个蕴含手写数字的数据集,用于训练和测试图像识别零碎。 一、筹备环境首先,咱们须要装置所需的库。在这里,咱们将应用 TensorFlow 和 Keras。您能够应用以下命令装置这些库: pip install tensorflow keras二、加载数据咱们将从Keras中导入MNIST数据集,并将其分为训练集和测试集: from keras.datasets import mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()三、数据预处理在将数据输出模型之前,咱们须要对其进行预处理。首先,咱们将图像数据归一化: x_train = x_train / 255.0x_test = x_test / 255.0接下来,咱们将指标变量(手写数字的理论值)转换为分类变量,以便在训练过程中应用: from keras.utils import to_categoricaly_train = to_categorical(y_train, num_classes=10)y_test = to_categorical(y_test, num_classes=10)四、构建模型咱们将应用Keras来构建一个简略的神经网络模型。首先,咱们导入所需的模块,并创立一个程序模型: from keras.models import Sequentialfrom keras.layers import Dense, Flattenmodel = Sequential()而后,咱们增加层到模型中。这里咱们应用一个简略的两层神经网络: model.add(Flatten(input_shape=(28, 28)))model.add(Dense(128, activation='relu'))model.add(Dense(10, activation='softmax'))最初,咱们编译模型,并指定优化器、损失函数和评估指标: model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])五、训练模型咱们能够应用以下代码训练模型: model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.1)这将应用训练数据对模型进行训练,并在每个周期完结时应用验证集评估模型性能。 六、评估模型在训练实现后,咱们能够应用测试集评估模型性能: test_loss, test_accuracy = model.evaluate(x_test, y_test)print("测试集准确率:", test_accuracy)这将输入模型在测试集上的准确率。 至此,咱们曾经实现了一个简略的图像识别零碎。依据须要,您能够尝试改良模型构造、应用更简单的数据集或尝试不同的预处理技术。

May 9, 2023 · 1 min · jiezi

关于python:IF条件控制语句

ython的IF语句,跟PHP的语法上有较大的区别Python的IF语句省略了 ()、{}符号,多个IF嵌套之间,须要应用语句上下文对齐来辨别执行程序。else if语句也能够简写成 elif语句。具体内如能够看{WRITE-BUG数字空间}原文链接:https://www.writebug.com/article/930c3902-c790-11ed-b4d0-6479...

May 9, 2023 · 1 min · jiezi

关于python:深入理解-python-虚拟机描述器的王炸应用propertystaticmethod-和-classmehtod

深刻了解 python 虚拟机:形容器的王炸利用-property、staticmethod 和 classmehtod在本篇文章当中次要给大家介绍形容器在 python 语言当中有哪些利用,次要介绍如何应用 python 语言实现 python 内置的 proterty 、staticmethod 和 class method 。 property当你在编写Python代码时,你可能会遇到一些须要通过办法来拜访或设置的属性。Python中的 property 装璜器提供了一种优雅的形式来解决这种状况,容许你将这些办法封装为属性,从而使代码更加简洁和易于浏览。在本文中,我将向你介绍 property 装璜器的工作原理以及如何在你的代码中应用它。 什么是 property?Python 中的 property 是一种装璜器,它容许你定义一个办法,使其看起来像一个属性。换句话说,property 容许你以属性的形式拜访或设置类的数据成员,而不用间接调用一个办法。 在 Python 中,属性通常是一个对象的数据成员,它们能够通过间接拜访对象来获取或设置。然而,有时候你可能须要在获取或设置属性时执行某些额定的操作,例如进行类型查看、范畴查看或计算属性等。在这种状况下,应用 property 装璜器能够让你以属性的形式拜访或设置这些属性,并在拜访或设置时执行额定的操作。 如何应用 property?让咱们看一个简略的例子,假如你正在编写一个示意矩形的类,并且你想要在计算矩形的面积时执行一些额定的操作。你能够应用 property 装璜器来实现这个性能,如下所示: class Rectangle: def __init__(self, width, height): self._width = width self._height = height @property def width(self): return self._width @width.setter def width(self, value): if value <= 0: raise ValueError("Width must be positive") self._width = value @property def height(self): return self._height @height.setter def height(self, value): if value <= 0: raise ValueError("Height must be positive") self._height = value @property def area(self): return self._width * self._height在这个示例中,咱们应用 property 装璜器定义了三个属性:width、height和area。每个属性都有一个 getter 办法和一个 setter 办法,它们别离负责获取和设置属性的值。当你应用类的实例拜访这些属性时,你会发现它们仿佛就像是一个一般的属性,而不是一个办法。 ...

May 8, 2023 · 4 min · jiezi

关于python:验证码逆向专栏数美验证码全家桶逆向分析以及-AST-获取动态参数

申明本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关! 本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】分割作者立刻删除! 指标指标:数美全家桶,包含:滑块、文字点选、图标点选、语序点选、空间推理、无感验证地址:// 官网体验地址aHR0cHM6Ly93d3cuaXNodW1laS5jb20vdHJpYWwvY2FwdGNoYS5odG1s// 官网暗藏地址aHR0cHM6Ly9jYXN0YXRpYy5mZW5na29uZ2Nsb3VkLmNuL3ByL3YxLjAuNC9kZW1vLmh0bWw=// 某红书验证页面aHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tL3dlYi1sb2dpbi9jYXB0Y2hh数美不同类型验证码外围的 JS 都是一样的,只是个别参数有渺小差异,次要以滑块为例来剖析,通过 JS 代码以及官网文档能够看出数美是有无感验证的,然而官网体验地址里并没有放进去,官网有一个暗藏地址,外面的 demo 是最全的,包含无感,能够去下面给出的第二个地址里查看;数美的加密参数蕴含了 DES 加密算法,参数名以及 DES Key 不定时会变动,本文也会剖析如何利用 AST 来获取动静的参数。 抓包剖析conf 接口,获取配置,次要是获取外围的 captcha-sdk.min.js 的地址,申请参数解释: 参数含意organization数美调配的公司标识,个别是每个网站惟一,写死即可appId利用标识,辨别不同利用,数美后盾能够治理callback回调参数lang语言,zh-cn 简体中文、zh-tw 繁体中文、en 英文model模式,slide 滑块、auto_slide 无感验证、select 文字点选、icon_select 图标点选、seq_select 语序点选、spatial_select 空间推理sdkver这个 sdk 版本是 captcha-sdk.min.js 外部写死的channel推广渠道,数美后盾能够治理captchaUuid32位随机字符串,与业务方本身埋点数据配合,便于后续定位问题或进行数据统计rversioncaptcha-sdk.min.js 版本号 返回后果重点看 captcha-sdk.min.js 文件地址,如下图所示有个 v1.0.4-171,本文中咱们称 v1.0.4 为大版本,171 为小版本,小版本不定时会更新,版本号一直升高。 而后就是 register 接口,不同类型,返回的数据都大同小异,其中 bg 是背景图片,fg 是滑块,文字点选、空间推理中 order 是提示信息,k、l、rid 三个参数后续会用到。 最初就是 fverify 验证接口,有相似下图红框中的 12 个参数,都是通过 JS 生成的,其参数名会依据 captcha-sdk.min.js 的变动而变动,其中有个最长的相似于下图的 ep 值,蕴含了轨迹加密。返回值里参数解释: ...

May 8, 2023 · 3 min · jiezi

关于python:python实现中文和unicode转换

在 Python 中,能够应用 encode() 和 decode() 办法实现中文和 Unicode 编码之间的互相转换。 将中文转换为 Unicode 编码: chinese_str = "中文"unicode_str = chinese_str.encode("unicode_escape").decode()print(unicode_str)将 Unicode 编码转换为中文: unicode_str = "\\u4e2d\\u6587"chinese_str = bytes(unicode_str, 'utf-8').decode('unicode_escape')print(chinese_str)运行上述代码后,将会别离输入中文和 Unicode 编码。其中,将中文转换为 Unicode 编码时,应用 encode() 办法将中文字符串编码为 Unicode 转义序列,再应用 decode() 办法将转义序列转换为 Unicode 编码字符串。而将 Unicode 编码转换为中文时,应用 bytes() 办法将 Unicode 编码字符串转换为字节序列,再应用 decode() 办法将字节序列转换为中文字符串。 须要留神的是,在应用 encode() 和 decode() 办法时,须要指定正确的编码方式,例如上述代码中应用的是 utf-8 编码。如果编码方式不正确,将可能导致转换谬误。

May 8, 2023 · 1 min · jiezi

关于python:关于Tensorflow目标检测预训练模型的迁移学习

前言对于TF的指标检测迁徙学习,我一开始是想通过Tensorflow提供的API,用JS来实现的。然而官网岂但没有案例,网上也没有踩坑的博客,加之我又焦急要弄水印检测。 于是就在网上看了很多人用python实现的自定义训练,我也试过很多。运行的时候各种问题,不是短少模块,就是版本兼容问题说什么convert 't' to a tensor and failed,还有运行Tensorboard打不开等等各种问题。所以我把运行过程遇到的大小谬误,以及谬误起因,如何解决报错都记录了下来,上面内容有跳过后面的环境搭建。如果要残缺的从环境搭建,模型测试和接下来的迁徙学习,须要联合后面的两篇文章一起看。 数据集制作指标检测的数据集就是对以往图片通过工具进行无休止的标注了,标注工具有很多,这里我应用的是LableImg。地址:https://github.com/heartexlabs/labelImg,该工具曾经有发行版,标注会与图片生成绝对应的xml文件。为了前面的训练,能够将数据集分成train(训练集)和test(测试集),而后在我的项目的 "models\research\object_detection" 新建 images(名字自定,只是前面配置要用到)文件夹并放入其中。 数据处理这里要通过脚本将xml和图片门路转成xml,而后再将xml转为训练须要的record格局,在转换前须要在我的项目的"models\research\object_detection"下新建 "training" (寄存训练配置,标注映射,训练日志)和 "inference_graph" (最初训练的模型),这里能够间接将国外博主demo(TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10),会笼罩并携带这几个文件夹,如下。 1.将xml文件转换为csv文件 1.1.新建xml_to_csv.py放入上图目录下。 1.2.代码编写 import osimport globimport pandas as pdimport xml.etree.ElementTree as ETdef xml_to_csv(path): xml_list = [] for xml_file in glob.glob(path + '/*.xml'): tree = ET.parse(xml_file) root = tree.getroot() for member in root.findall('object'): value = (root.find('filename').text, int(root.find('size')[0].text), int(root.find('size')[1].text), member[0].text, int(member[4][0].text), int(member[4][1].text), int(member[4][2].text), int(member[4][3].text) ) xml_list.append(value) column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax'] xml_df = pd.DataFrame(xml_list, columns=column_name) return xml_dfdef main(): for folder in ['train','test']: image_path = os.path.join(os.getcwd(), ('images/' + folder)) xml_df = xml_to_csv(image_path) xml_df.to_csv(('images/' + folder + '_labels.csv'), index=None) print('Successfully converted xml to csv.')main()1.3. 运行(胜利后会在image下生成两个csv文件)python xml_to_csv.py ...

May 8, 2023 · 3 min · jiezi

关于python:使用-Python-实现简单的爬虫框架

爬虫是一种主动获取网页内容的程序,它能够帮忙咱们从网络上疾速收集大量信息。在本文中,咱们将学习如何应用 Python 编写一个简略的爬虫框架。 一、申请网页首先,咱们须要申请网页内容。咱们能够应用 Python 的 requests 库来发送 HTTP 申请。在应用之前,请确保已装置该库: pip install requests而后,咱们能够应用以下代码申请网页内容: import requestsurl = "https://example.com"response = requests.get(url)if response.status_code == 200: print(response.text)else: print("申请失败")二、解析 HTML接下来,咱们须要解析 HTML 以提取所需的数据。BeautifulSoup 是一个十分风行的 HTML 解析库,咱们能够应用它来简化解析过程。首先装置库: pip install beautifulsoup4而后,咱们能够应用以下代码解析 HTML: from bs4 import BeautifulSouphtml = response.textsoup = BeautifulSoup(html, 'html.parser')# 提取网页题目title = soup.title.stringprint("网页题目:", title)三、构建爬虫框架当初咱们曾经把握了申请网页和解析 HTML 的基本知识,咱们能够开始构建爬虫框架。首先,咱们须要定义一个函数来解决每个网页: def process_page(url): # 申请网页 response = requests.get(url) if response.status_code == 200: # 解析 HTML soup = BeautifulSoup(response.text, 'html.parser') # 解决网页数据 process_data(soup) else: print("申请失败")接下来,咱们须要编写 process_data 函数来解决网页数据: ...

May 8, 2023 · 1 min · jiezi

关于python:实验室设备管理系统

拜访【WRITE-BUG数字空间】_[内附残缺源码和文档]利用背景为不便实验室进行设施治理,某大学拟开发实验室设施管理系统 来治理所有实验室里的各种设施。零碎可实现管理员登录,查看现有的所有设施, 减少设施等性能。开发环境Mac OSPyCharm IDEPython3Flask(Web框架)SQLite(数据库)运行办法筹备装置virtualenv: pip3 install virtualenv创立虚拟环境: virtualenv venv进虚拟环境: source venv/bin/activate装置依赖的包: pip install -r requirements.txt退出虚拟环境: deactivate运更新数据库: python app.py db upgrade成户: python app.py init运: python app.py runserver初始管理员账户邮箱:zhaowrenee@gmail.com 明码:666666性能构造登录:管理员能够通过输出预置的账号密码进行登录。查看设施列表:管理员在登录胜利后,应立即展现所有设施信息,设施 信息应包含设施 ID 号,设施名,实验室名,购买工夫,购买人。减少设施:减少设施时应输出设施名,实验室名,购买人等信息,设施 减少胜利后主动返回零碎调配的设施 ID 号,购买工夫应为零碎主动生成(默认为减少设施的工夫)。[附加] 删除设施:管理员自己购买的设施具备顶级重要性,故不能被删除[附加] 搜寻设施:输出关键词,显示名称中蕴含关键词的设施列表另外保障:对输出数据进行合法性验证,并进行敌对提醒。对数据库中的明码字段加密解决。提醒设施 ID 号应保障唯一性。设施名可反复。性能细节一、UML图1、流动图app.py中function与 templates中HTML件对应,展现在页中:index() 通过 SearchForm 实现对户信息的检索和展现,并通过 index.htmladd_device() 通过 UserForm 实现对新设施信息的增加,并调 add_device.htmlremove_device(id) 通过id删除设施,但不能删除管理员增加的设施login() 通过调 LoginForm 实现登录,并调 login.html 页登录,也是服务器提供的第个页其余function对应系列错误处理和必要但和数据库关性能2、用例图3、程序图4、类图HTML使Flask-wtf Bootstrap渲染性能,使界更好看app.Role为户设置的用户或者管理员角类,外部有条件角条件束缚app.User 户类记录户名、明码、id等信息,与数据库的属性进行交互app.Device 设施类记录设施名、实验室、购买人、购买工夫等信息,与数据库的属性进行交互FlaskForm 信息表三种Form依据不同的操作需要,设定不同的Field5、状态图、根本表单的定义表一:roles 身份表名称类型NOT NULL束缚PRIMARY KEY束缚UNIQUE束缚默认外键idINTEGER√√nameVARCHAR(64)CREATE TABLE roles ( id INTEGER NOT NULL, name VARCHAR(64), PRIMARY KEY (id), UNIQUE (name))表中实体:idname1User2Admin

May 8, 2023 · 1 min · jiezi

关于python:Python-微服务开发使用-FastAPI-构建高效-API

微服务架构在古代软件开发中日益遍及,它将简单的应用程序拆分成多个可独立部署的小型服务。本文将介绍如何应用 Python 的 FastAPI 库疾速构建和部署微服务。 一、什么是 FastAPI?FastAPI 是一个古代、高性能的 Python Web 框架,专为构建 API 而设计。它基于 Starlette(用于 ASGI 反对)和 Pydantic(用于数据验证)。FastAPI 的特点包含: 易于上手,疾速开发主动生成交互式文档易于测试与调试弱小的类型检查和数据验证二、装置 FastAPI要应用 FastAPI,首先须要装置它及其依赖。在命令行中执行以下命令: pip install fastapipip install uvicorn三、创立一个简略的 FastAPI 利用创立一个名为 main.py 的文件,而后编写如下代码: from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}四、运行 FastAPI 利用在命令行中,应用以下命令启动利用: uvicorn main:app --reload当初,能够通过拜访 http://127.0.0.1:8000 来查看 API 的响应。 五、增加路由和数据验证FastAPI 能够轻松增加新路由并对输出数据进行验证。以下是一个蕴含新路由的示例: from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class Item(BaseModel): name: str description: str = None price: float tax: float = None@app.post("/items/")def create_item(item: Item): return item六、API 文档与测试FastAPI 主动生成交互式 API 文档,能够通过拜访 http://127.0.0.1:8000/docs 查看。此外,还能够应用 FastAPI 的 TestClient 进行 API 测试。 ...

May 7, 2023 · 1 min · jiezi

关于python:基于-EKS-Fargate-搭建微服务性能分析系统

背景近期 Amazon Fargate 在中国区正式落地,因 Fargate 应用 Serverless 架构,更加适宜对性能要求不敏感的服务应用,Pyroscope 是一款基于 Golang 开发的应用程序性能剖析工具,Pyroscope 的服务端为无状态服务且性能要求不敏感,应用 EKS Fargate 搭建 Pyroscope,Pyroscope 的客户端应用 DNS 地址连贯到服务端。将为单次性能测试和继续性能优化提供保障,并且每当应用服务上线或更新后,流量减少或者性能故障都会造成终端用户的体验变差,如何定位性能瓶颈便成为了重点,在 EKS Fargate上 搭建 Pyroscope 既能缩小开发者的保护老本又能给开发者开箱即用的性能瓶颈疾速定位到代码的平台,而且 Pyroscope 反对 Python,Rust,NodeJS,Rube,Java,DotNet,Golang 等多语言环境 亚马逊云科技开发者社区为开发者们提供寰球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、流动与比赛等。帮忙中国开发者对接世界最前沿技术,观点,和我的项目,并将中国优良开发者或技术举荐给寰球云社区。如果你还没有关注/珍藏,看到这里请肯定不要匆匆划过,点这里让它成为你的技术宝库!应用场景疾速发现源代码中的存在的性能问题依据指标监控发现高 CPU 利用率的问题疾速定位内存透露和修复辅助提供无效撑持深刻了解应用程序的调用耗时和依赖树跟踪指标和时间轴以便于定位性能异样点集成到 CI 定位每次变更的性能状况介绍下 Pyroscope这是一款开源的实时性能监控平台,应用 Agent/SDK – Server 架构,让开发者能够轻松监控服务性能,因 Pyroscope 监控的级别足够深刻。不论是最近5秒的数据还是长期存储的性能数据,都能够疾速通过 Grafana Plugin 或者 Pyroscope UI 进行定位。且因为应用分块采样的能力。使得应用 Pyrosocpe 的 Agent 对应用程序的 CPU 占用较低。 Pyroscope Server 采纳 BadgerDB 作为 Key-value 数据存储(将来将会反对 S3 兼容存储),具备高压缩比,低磁盘空间占用和低成本。反对多种语言和 Docker,k8s,EC2 等多种平台注入,Python,Rube,Java,DotNet 都是通过 pyrosocope 的命令启动相干 Agent 来执行监控,针对 metric-export 和 eBPF 有也有相干反对 ...

May 6, 2023 · 2 min · jiezi

关于python:如何在-Windows10-下运行-Tensorflow-的目标检测

前言&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp看过很多博主通过 Object Detection 实现了一些皮卡丘捕获,二维码检测等诸多特定项的指标检测。而我跟着他们的案例来运行的时候,不是 Tensorflow 版本抵触,就是短少什么包,还有是运行官网 object_detection_tutorial 不展现图片等等问题。 &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp在看过一个国外博主例子,我也通过 Tensorflow-GPU1.10.0 运行了官网例子,既然要应用 GPU 则须要把 CUDA 先配置好,上一篇文章有特地具体介绍到。而这里就捋一下在运行过程遇到的种种问题。 环境1.windows10 的 64 位电脑 2.显卡 GeForce GTX 750 Ti 3.Python 3.6.13 4.Tensorflow-GPU 1.10.0 5.Cuda 9.0.176 6.Cudnn7.0.5 环境搭建1.装置 Python 3.6.13 环境因为之前我有其余我的项目用了高版本的 Py,这里我就用了 Anconda3 的 conda 创立一个虚拟环境,这里的 conda 的 bin 目录须要加到环境变量中。 1.1. 查看环境列表 输出 conda env list,就能够列出以往所有的环境名了,也是为了防止前面太多类似 1.2. 创立新环境并进入 conda create -n object_dection python=3.6 && conda activate object_dection 1.3. 装置 Tensorflow-gpu 因为以上通过 conda 创立了新环境也装置了 pip,所以只须要输出 pip install tensorflow-gpu==1.10.0,在下载过程中可能会中断,要多试几次。 ...

May 6, 2023 · 2 min · jiezi

关于python:Python-技巧轻松管理与操作文件

在日常开发中,咱们常常会遇到须要对文件进行操作的场景,如读写文件、文件夹操作等。本文将为大家介绍一些 Python 中解决文件的实用技巧,让你的工作更高效。 一、读写文件 在 Python 中,咱们能够应用 open() 函数关上文件,with 语句能够主动敞开文件。 读取文件内容:with open('example.txt', 'r', encoding='utf-8') as f: content = f.read()print(content)写入文件:with open('example.txt', 'w', encoding='utf-8') as f: f.write('Hello, Python!')二、遍历文件夹 应用 os 模块,咱们能够轻松地遍历文件夹内的文件。 import osfolder_path = './example_folder'for root, dirs, files in os.walk(folder_path): for file in files: print(os.path.join(root, file))三、创立与删除文件夹 利用 os 模块,咱们能够不便地创立和删除文件夹。 创立文件夹:import osfolder_name = 'new_folder'if not os.path.exists(folder_name): os.makedirs(folder_name)删除文件夹:import shutilfolder_name = 'new_folder'if os.path.exists(folder_name): shutil.rmtree(folder_name)四、文件门路操作 os.path 模块提供了很多文件门路操作的实用函数。 拼接门路:import ospath1 = 'folder'path2 = 'file.txt'full_path = os.path.join(path1, path2)print(full_path)宰割文件名和扩展名:import osfilename = 'example.txt'name, ext = os.path.splitext(filename)print(name, ext)五、总结 ...

May 6, 2023 · 1 min · jiezi

关于python:太为难我了阿里面试了7轮

作者 | 程序员二黑专一于软件测试畛域相干技术实际和思考,继续分享自动化软件测试开发干货常识!如果你也想学习软件测试,欢送退出我的交换群:832452893,一起交换和学习!前言往年的大环境十分差,互联网企业裁员的景象比今年更重大了,可往年刚好是我的第一个“五年计划”截止的工夫点,说什么也不可能耽误了,所以早早筹备的跳槽也在疫情恶化之后开始进行了。然而,不得不说,这次阿里面试真的太难为我了,能够说是和面试官大战了7个回合,不过好在最初给了offer。 我集体状况是5年软件测试教训,阿里定级P7的样子,上面是我的面试经验分享,心愿能带来一些不一样的启发和帮忙。 我与阿里面试官“大战”7回合,胜第一轮:技术面试:次要考查候选人的根本技术功底,包含编程语言、数据结构、算法等方面。 请简述一下你对测试的了解和你认为一个好的测试工程师应该具备哪些能力。说一下你在我的项目中如何设计测试用例?简述一下测试计划的制订过程以及其中波及到的内容。在压力测试中,你会关注哪些指标,并举例说明如何进行压力测试。当你在进行接口测试时,如果发现返回后果与冀望不符,你会怎么做?请谈一下你的思考过程。如果有一个从未测试过的产品版本,让你来负责测试,你会如何布局测试流程?请介绍一下你在自动化测试方面的教训和技能。你认为测试流程对于软件开发的重要性是什么?并分享一下你在测试流程上的实践经验第二轮:我的项目教训面试:次要考查候选人在测试畛域的理论工作教训和项目管理能力。 你在阿里我的项目中负责的测试工作是什么?具体包含哪些方面?请形容一下你在阿里我的项目中遇到的最大的测试挑战是什么?你是如何克服这个挑战的?阿里的零碎很大,您如何确定测试的重点?您如何为阿里我的项目编写测试计划和测试用例?阿里我的项目中有没有应用过自动化测试?如果有,您是如何实现自动化测试的?在阿里我的项目中,您如何进行性能测试和平安测试?您采取了哪些措施来确保零碎的高性能和安全性?阿里我的项目中您遇到过哪些问题?您是如何解决这些问题的?在阿里我的项目中,您如何与开发人员、产品经理和其余团队成员协同工作,以确保测试工作的顺利进行?在阿里我的项目中,您如何跟踪和记录缺点?您采纳了哪些工具来治理缺点?您认为在阿里我的项目中最重要的测试技能是什么?为什么?第三轮:测试实践面试:次要考查候选人对测试实践的把握水平,包含测试方法、测试流程、测试策略等方面。 什么是软件测试?请形容一下您的了解。 请简述测试用例的概念,并提供一个测试用例的例子。 请解释一下动态测试和动静测试的区别。 什么是黑盒测试?请举一个例子并形容其优缺点。 请解释一下白盒测试?请举一个例子并形容其优缺点。 请形容一下自动化测试的概念,并提供一些适宜自动化测试的场景。 请简述负载测试的概念,并提供一个负载测试的例子。 请形容一下平安测试,并提供一个平安测试的例子。 请解释一下回归测试的概念,并提供一个回归测试的例子。 请形容一下性能测试,包含如何设置性能指标、如何设计性能测试用例和如何进行性能测试剖析。 第四轮:测试工具面试:次要考查候选人对各种测试工具的熟练程度,包含性能测试工具、自动化测试工具、平安测试工具等方面。 你相熟哪些阿里巴巴罕用的测试工具?JMeter有哪些特点?它能够模仿哪些协定?Selenium能够用来进行什么类型的测试?请形容一下Selenium的架构。TestNG和JUnit相比有哪些劣势?如何在TestNG中进行参数化测试?Appium能够用来测试哪些挪动应用程序?请简述Appium的原理。Lighthouse次要用于评估Web应用程序的哪些方面的品质和性能?如果要对一个分布式实时计算零碎进行性能测试,你会抉择应用哪些测试工具?TDDL是什么?它的次要作用是什么?第五轮:团队合作面试:次要考查候选人的团队单干意识和沟通能力。 你如何跟进和治理一个测试项目?请形容一下。在测试过程中,如果发现一个重大的缺点,你会怎么做?在告诉开发人员之前,你须要实现什么工作?如何与开发团队建设良好的单干关系?请分享一下你的教训。如果你发现开发人员没有及时修复缺点,你会采取哪些措施来促成缺点的修复?当多个团队同时参加到一个大型软件我的项目中时,你如何保障不同团队之间的无效沟通?请分享一下你的策略。如果你在测试过程中遇到了一个难以重现的问题,你会怎么解决?第六轮:算法题面试:次要考查候选人的逻辑思维能力和解决问题的能力。 请实现一个函数,用于计算两个整数的和,不能应用加减乘除等算术运算符。给定一个字符串,找到其中第一个不反复呈现的字符,并返回其索引。如果不存在,则返回-1。实现一个函数,用于合并两个有序数组为一个有序数组。在一个长度为n的数组中查找第k大的元素。例如,当k=2时,后果应该是数组中第二大的元素。给定一组区间,将它们合并成尽可能少的区间。例如,输出[[1,3],[2,6],[8,10],[15,18]],输入[[1,6],[8,10],[15,18]]。第七轮:HR面试:次要考查候选人的集体素质和职业规划。 请简略介绍一下本人的教育背景和工作经验。除了软件测试,你还具备哪些其余技能或者兴趣爱好?你在工作中遇到过最大的挑战是什么,你是如何应答的?你认为软件测试岗位须要具备哪些技能和品质?你本人具备其中哪些?你对将来三年的职业规划是什么?你心愿从阿里巴巴这个公司取得什么?阿里7轮面试经验完整版(含答案和解析):因为要管制文章篇幅,所以都是以截图形式展现内容。对于完整版面试手册,若是感兴趣想学习的敌人点击文末名片扫码收费支付,无套路。 第一局部,测试实践(测试根底+需要剖析+测试模型+测试计划+测试策略+测试案例等等)第二局部,Linux( Linux根底+Linux练习题)第三局部,MySQL(基础知识+查问练习+万年学生表经典面试题汇总+数据库企业真题)第四局部,Web测试第五局部,API测试第六局部,App测试第七局部,管理工具第八局部,Python根底(Python根底+编程题+汇合+函数+Python个性等等)第九局部,Selenium相干第十局部,性能测试第十一部分,LordRunner相干第十二局部,计算机网络第十三局部,组成原理第十四局部,数据结构与算法第十五局部,逻辑题第十六局部,人力资源 一、软件测试根底软件测试的步骤是什么?如何录制测试脚本?应该思考进行如何测试的测试方法怎么预计测试工作量?测试设计的问题当测试过程产生谬误时,有哪几种解决办法?测试执行的问题测试评估的指标如何进步测试?C/S模式的长处和毛病B/S模式的长处和毛病.... 二、Linuxgrep和find的区别? grep 都有哪些用法?查看IP地址?创立和删除一个多级目录?在以后用户家目录中查找haha.txt文件?如何查问出tomcat的过程并杀掉这个过程,写出linux命令?动静查看日志文件?查看系統硬盘空间的命令?查看以后机器listen 的所有端口?...... 三、Python统计python源代码文件中代码行数,去除正文,空行,进行输入?python调用cmd并返回后果?冒泡排序1,2,3,4 这4个数字,能组成多少个互不雷同的且无反复的三位数,都是多少?请用 python 打印出 10000 以内的对称数(对称数特点:数字左右对称,如:1,2,11,121,1221 等)给定一个整数 N,和一个 0-9 的数 K,要求返回 0-N 中数字 K 呈现的次数判断 101-200 之间有多少个素数,并输入所有的素数一个输出三角形的函数,输出后输入是否能组成三角形,三角形类型,请用等价类- 划分法设计测试用例.......四、MySQL你用的Mysql是哪个引擎,各引擎之间有什么区别? 如何对查问命令进行优化?数据库的优化?Sql注入是如何产“生的,如何避免?NoSQL和关系数据库的区别?MySQL与MongoDB实质之间最根本的差异是什么Mysql数据库中怎么实现分页?Mysql数据库的操作?优化数据库?进步数据库的性能?什么是数据的完整性?......五、WebWeb测试和app测试区别?WEB测试环境搭建和测试方法WEB测试教程WEB测试要点及根本办法Web测试页面总结.......六、接口测试什么是接口如果模块申请http改为了https,测试计划应该如何制订,批改?罕用HTTP 协定调试代理I具备什么?具体阐明抓取HTTPS协定的设置过程?形容TCP/IP协定的层次结构,以及每一-层中重要协定jmeter,一个接口的响应后果如下:接口产生的垃圾数据如何清理依赖第三方的接口如何解决测试的数据你放在哪?什么是数据驱动,如何参数化?...七、性能测试你认为性能测试的目标是什么?做好性能测试的工作的要害是什么?服务端性能剖析都从哪些角度来进行?如何了解压力测试,负裁测试以及性能测试?如何判断是否有内存透露及关注的指标?形容软件产“生内存泄露的起因以及查看形式。(能够联合- 种开发语言进行形容)简述什么是值传递,什么是地址传递,两者区别是什么?什么是零碎瓶颈?...八、selenium如何发展自动化测试框架的构建?如何设计自动化测试用例:webdriver如何开启和退出一个浏览器?什么是自动化测试框架?Selenium是什么,风行的版本有哪些?你如何从命令行启动Selenium RC?在我的机器端口4444不是收费的。我怎样才能应用另一个端口?什么是Selenium Server,它与Selenium Hub有什么不同?你如何从Selenium连贯到数据库?你如何验证多个页面上存在的一个对象?XPath中应用单斜杠和双斜杠有什么区别?如何编写SeleniumIDE/ RC的用户扩大?如何在页面加载胜利后验证元素的存在?你对Selenium Grid有什么理解?它提供了什么性能?如何从你的Java Class启动Selenium服务器?Selenium中有哪些验证点?什么是XPath?什么时候应该在Selenium中应用XPath?........九、计算机与网络一台计算机的IP是192.168.10.71子网掩码255.255.255.64与192.168.10.201 ..请简述DNS、流动目录、域的概念。10M兆宽带是什么意思?实践下载速度是多少?什么是IP地址?OSI七层网络模型的划分?TCP和UDP有什么不同?HTTP属于哪一层的协定?HTTP和HTTPS的区别?cookies和session的区别?HTTP的get申请和post申请的区别?HTTP1.0和HTTP1.1有什么区别TCP的连贯建设过程,以及断开过程?客户端应用DHCP获取IP的过程?写出某个网段的网络地址和播送地址?.....十、人力资源你的测试职业倒退是什么?你自认为做测试的劣势在哪里?你找工作时,最重要的思考因素为何?为什么咱们应该录取你?请谈谈你集体的最大特色。一个测试工程师应具备那些素质和技能?还有问一下你是怎么保障软件品质的,也就是说你感觉怎样才能最大限度地保障软件品质?为什么抉择测试这行?如果我雇用你,你能给部门带来什么奉献?......最初整份文档一共有将近 200 页,全副为大家展现进去必定是不太事实的,为了不影响大家的浏览体验就只展现了局部内容,还望大家海涵,心愿能帮忙到您面试前的温习且找到一个好的工作,也节俭大家在网上搜寻材料的工夫来学习!有须要的敌人能够加群:832452893,收费支付!

May 5, 2023 · 1 min · jiezi

关于python:peewee-使用-save-之后返回值是-0并且没有真正保存到数据库中为什么

有可能: 已存在 pk对于第一种状况,如果 save 的 object 存在 id 或者 pk 的话,调用 save 并不会真的 insert 数据库,除非去掉 id 或者 pk,或者 save 的时候,把 force_insert 参数置为 True FinishedImdbMatchTask( **model_to_dict( WorkingImdbMatchTask.get_or_none( WorkingImdbMatchTask.task_key == task_key) ) ).save(force_insert=True)当然,还有一种可能,参考:

May 5, 2023 · 1 min · jiezi

关于python:peewee-的-save-的-only-参数是干嘛的

在 Peewee 中,save 办法的 only 参数用于指定应该仅保留哪些字段的更改。默认状况下,调用 save 办法将保留所有字段的更改,然而通过将 only 参数设置为指定的字段名称列表,能够限度保留的字段。 例如,假如咱们有一个 User 模型,其中蕴含 name、email 和 password 字段。咱们只想在保留模型时保留 name 和 email 字段的更改,能够应用以下代码: user = User.get_by_id(1)user.name = 'New Name'user.email = 'newemail@example.com'user.save(only=[User.name, User.email])这将只保留 name 和 email 字段的更改,并且不会保留 password 字段的更改。

May 5, 2023 · 1 min · jiezi

关于python:Python-日期和时间

Python 程序能用很多形式解决日期和工夫,转换日期格局是一个常见的性能。Python 提供了一个 time 和 calendar 模块能够用于格式化日期和工夫。 工夫距离是以秒为单位的浮点小数。 每个工夫戳都以自从1970年1月1日午夜(历元)通过了多长时间来示意。 Python 的 time 模块下有很多函数能够转换常见日期格局。如函数time.time()用于获取以后工夫戳具体内容能够看原文链接{数字空间WRITE-BUG}:https://www.writebug.com/article/931f4c01-c790-11ed-aa93-6479...

May 5, 2023 · 1 min · jiezi

关于python:Python-机器学习之-Scikitlearn-入门实践

机器学习在当今的科技领域中扮演着越来越重要的角色。Python 作为一门易学且功能强大的编程语言,已成为许多数据科学家和机器学习从业者的首选。本文将介绍如何应用 Python 中的 Scikit-learn 库进行机器学习实际。 一、Scikit-learn 简介Scikit-learn 是一个基于 Python 语言的开源机器学习库。它蕴含了大量的机器学习算法,如分类、回归、聚类、降维等,同时还提供了模型抉择、数据预处理、模型评估等性能。Scikit-learn 的长处在于简略易用、丰盛的性能和良好的文档反对。 二、装置 Scikit-learn在应用 Scikit-learn 之前,首先须要装置库。应用如下命令进行装置: pip install scikit-learn三、加载数据集Scikit-learn 内置了一些经典的数据集,如鸢尾花数据集、波士顿房价数据集等。咱们能够通过以下代码导入鸢尾花数据集: from sklearn import datasetsiris = datasets.load_iris()四、数据预处理数据预处理是机器学习中十分重要的一步。常见的数据预处理操作包含:缺失值解决、数据标准化、特征选择等。以下是一个简略的数据标准化示例: from sklearn.preprocessing import StandardScalerscaler = StandardScaler()iris_scaled = scaler.fit_transform(iris.data)五、划分训练集和测试集在进行机器学习工作时,通常须要将数据集划分为训练集和测试集。以下是一个简略的划分示例: from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(iris_scaled, iris.target, test_size=0.2, random_state=42)六、抉择模型和训练Scikit-learn 提供了丰盛的机器学习模型,如决策树、反对向量机、K-近邻等。以下是一个应用决策树进行分类的示例: from sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier()clf.fit(X_train, y_train)七、模型评估模型训练实现后,咱们须要对模型的性能进行评估。Scikit-learn 提供了多种评估指标,如准确率、准确率、召回率等。以下是一个计算准确率的示例: from sklearn.metrics import accuracy_scorey_pred = clf.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f'Accuracy: {accuracy}')八、模型优化为了进步模型的性能,咱们能够尝试调整模型的超参数。Scikit-learn 提供了 GridSearchCV 工具来帮忙咱们进行参数调优。以下是一个应用 GridSearchCV 对决策树进行调优的示例: ...

May 5, 2023 · 1 min · jiezi

关于python:如何在TCP-服务端程序退出的时候关闭全部TCP连接释放端口资源

import osimport socketimport sysimport timeimport threadingfrom loguru import loggerfrom concurrent.futures import ThreadPoolExecutorfrom concurrent.futures._base import Futureimport multiprocessingdefault_encoding: str = 'utf-8'pool = ThreadPoolExecutor( max_workers=20, thread_name_prefix='simple-work-thread-pool')def init_serversocket() -> socket.socket: serversocket = socket.socket( family=socket.AF_INET, type=socket.SOCK_STREAM ) # 获取本地主机名 host = socket.gethostname() logger.debug(f'host {host}') port = 6001 # 绑定端口号 serversocket.bind(('0.0.0.0', port)) # 设置最大连接数,超过后排队 serversocket.listen(2048) return serversocketdef send_response(clientsocket: socket.socket, addr: tuple, response_body: bytes) -> int: send_len: int = clientsocket.send(response_body) clientsocket.close() return send_lendef start_request(clientsocket: socket.socket, addr: tuple) -> int: try: pid = os.getpid() # logger.debug(f'pid: {pid}, get message from {addr}') request_body: bytes = clientsocket.recv(2048) request_text: str = request_body.decode(encoding=default_encoding) response_text: str = f'server get message: {request_text}' response_body: bytes = response_text.encode(default_encoding) # time.sleep(1) send_len = send_response( clientsocket=clientsocket, addr=addr, response_body=response_body) # logger.debug(f'发送了响应') return send_len except Exception as error: logger.exception(error)def start_request_callback(future: Future) -> None: send_len: int = future.result() logger.debug( f'{threading.current_thread().name}, send payload len is {send_len}')if __name__ == "__main__": serversocket = init_serversocket() pool = multiprocessing.Pool(processes=16) try: while True: clientsocket, addr = serversocket.accept() clientsocket: socket.socket addr: tuple # future: Future = pool.submit(start_request, clientsocket, addr) # future.add_done_callback(start_request_callback) pool.apply_async(start_request, (clientsocket, addr)) finally: pool.close() pool.join()写了下面的代码,用于实现一个master-slave 架构的 TCP 服务,然而遇到了一个,就是我 CTRL+C 关了和这个过程组之后,过程没有全副敞开,并且还始终占用这端口 6001 ...

May 4, 2023 · 2 min · jiezi

关于python:PythonJQ与AI构建智能化金融分析平台

Python、JQ与AI:构建智能化金融剖析平台 随着人工智能技术的倒退和利用,金融行业也在逐步向智能化转型。作为金融畛域中宽泛应用的编程语言,Python曾经成为了实现金融智能化的重要工具之一。而JQ是国内出名的量化交易平台,能够不便地获取大量金融数据。本文将介绍如何联合Python、JQ和人工智能技术,构建一个智能化金融剖析平台。 数据获取首先,咱们须要从JQ平台上获取金融数据。JQ平台提供了各类金融数据的API接口,用户能够通过Python代码调用这些接口来获取所需数据。例如,咱们能够应用以下代码获取某只股票的历史K线数据: import jqdatasdk as jq jq.auth('账号', '明码') 获取000001.XSHE(安全银行)2019年1月1日至2020年1月1日的K线数据data = jq.get_price('000001.XSHE', start_date='2019-01-01', end_date='2020-01-01', frequency='daily')这段代码通过调用jq.get_price函数获取了000001.XSHE(安全银行)在2019年1月1日至2020年1月1日间每日的开盘价、收盘价、最高价、最低价等信息,并将这些数据存储在data变量中。 数据分析获取到金融数据后,接下来咱们须要对数据进行剖析。Python领有丰盛的数学计算和数据处理库,例如numpy、pandas、scipy等,这些库能够帮忙咱们轻松地进行数据分析和建模。 以股票价格预测为例,咱们能够应用以下代码对历史K线数据进行简略的线性回归剖析: import numpy as npimport pandas as pdfrom sklearn.linear_model import LinearRegression读取历史K线数据data = pd.read_csv('000001.XSHE.csv') 特色工程:提取收盘价和成交量作为模型输出特色X = data[['close', 'volume']].values 标签:提取第二天的收盘价作为模型输入标签y = data['close'].shift(-1).values 划分训练集和测试集split_ratio = 0.8train_size = int(len(X) * split_ratio)X_train, y_train = X[:train_size], y[:train_size]X_test, y_test = X[train_size:], y[train_size:]模型训练model = LinearRegression()model.fit(X_train, y_train)预测将来5天的收盘价future_data = np.array([[20, 1000000], [21, 2000000], [22, 3000000], [23, 4000000], [24, 5000000]])future_pred = model.predict(future_data)print(future_pred)这段代码通过pandas库读取了从JQ平台上获取的历史K线数据,而后应用numpy库提取收盘价和成交量作为模型输出特色,提取第二天的收盘价作为模型输入标签。接着,将数据集划分为训练集和测试集,并应用sklearn库中的线性回归模型进行训练和预测。 模型优化在理论利用中,咱们须要一直地对模型进行优化以进步预测准确度。例如,咱们能够应用深度学习技术来构建更加简单的神经网络模型,或者应用强化学习技术来构建智能化交易策略。 零碎构建最初,咱们能够将数据获取、数据分析和模型优化整合到一个残缺的零碎中,以不便用户进行金融剖析和决策。例如,咱们能够应用Python web框架Flask构建一个简略的Web利用,用户能够在网页上输出股票代码和预测时间段,零碎会主动调用API接口获取数据、进行剖析和预测,并将结果显示在网页上。 ...

May 4, 2023 · 1 min · jiezi

关于python:python-进程池的两种不同实现

形式一:应用 multiprocessing 库from loguru import loggerimport multiprocessingdef start_request(message: str) -> int: try: logger.debug(message) except Exception as error: logger.exception(error)if __name__ == "__main__": pool = multiprocessing.Pool(processes=2) for message in ['haha', 'hehe']: pool.apply_async(start_request, (message,)) pool.close() pool.join()形式二:应用 concurrent.futures 的 ProcessPoolExecutorfrom loguru import loggerimport multiprocessingfrom concurrent.futures import ProcessPoolExecutordef start_request(message: str) -> int: try: logger.debug(message) except Exception as error: logger.exception(error)if __name__ == "__main__": pool = ProcessPoolExecutor( max_workers=2 ) for message in ['haha', 'hehe']: pool.submit(start_request, message) pool.shutdown(wait=True)

May 4, 2023 · 1 min · jiezi

关于python:Python-环境搭建

Python(英国发音:/pan/ 美国发音:/pan/)是一种宽泛应用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆发明,第一版公布于 1991 年。能够视之为一种改进(退出一些其余编程语言的长处,如面向对象)的 LISP。 Python 的设计哲学强调代码的可读性和简洁的语法(尤其是应用空格缩进划分代码块,而非应用大括号或者关键词)。相比于 C++ 或 Java,Python 让开发者可能用更少的代码表白想法。不论是小型还是大型程序,该语言都试图让程序的构造清晰明了。 与 Scheme、Ruby、Perl、Tcl 等动静类型编程语言一样,Python 领有动静类型零碎和垃圾回收性能,可能主动治理内存应用,并且反对多种编程范式,包含面向对象、命令式、函数式和过程式编程。其自身领有一个微小而宽泛的规范库。 Python 解释器自身简直能够在所有的操作系统中运行。Python 的其中一个解释器 CPython 是用 C 语言编写的、是一个由社群驱动的自由软件,以后由 Python 软件基金会治理。 1989 年的圣诞节期间,由 Python 的创始人为吉多·范罗苏姆,业余时间开发。更多内容能够看原文章:https://www.writebug.com/article/930f464d-c790-11ed-938f-6479...

May 4, 2023 · 1 min · jiezi

关于python:Python网络爬虫原理及实践

作者:京东物流 田禹 1 网络爬虫网络爬虫:是一种依照肯定的规定,主动地抓取万维网信息的程序或者脚本。 网络爬虫相干技术和框架繁多,针对场景的不同能够抉择不同的网络爬虫技术。 2 Scrapy框架(Python)2.1. Scrapy架构2.1.1. 零碎架构 2.1.2. 执行流程总结爬虫开发过程,简化爬虫执行流程如下图所示: 爬虫运行次要流程如下: (1) Scrapy启动Spider后加载Spaider的start_url,生成request对象; (2) 通过middleware欠缺request对象(增加IP代理、User-Agent); (3) Downloader对象依照request对象下载页面; (4) 将response后果传递给spider的parser办法解析; (5) spider获取数据封装为item对象传递给pipline,解析的request对象将返回调度器进行新一轮的数据抓取; 2.2. 框架外围文件介绍2.2.1. scrapy.cfgscrapy.cfg是scrapy框架的入口文件,settings节点指定爬虫的配置信息,deploy节点用于指定scrapyd服务的部署门路。 | [settings] default = sfCrawler.settings [deploy] url =http://localhost:6800/ project = jdCrawler | 2.2.2. settings.pysettings次要用于配置爬虫启动信息,包含:并发线程数量、应用的middleware、items等信息;也能够作为零碎中的全局的配置文件应用。 注:目前次要减少了redis、数据库连贯等相干配置信息。 2.2.3. middlewares.pymiddleware定义了多种接口,别离在爬虫加载、输出、输入、申请、申请异样等状况进行调用。 注:目前次要用户是为爬虫减少User-Agent信息和IP代理信息等。 2.2.4. pipelines.py用于定义解决数据的Pipline对象,scrapy框架能够在settings.py文件中配置多个pipline对象,解决数据的个过程将依照settings.py配置的优先级的程序依次执行。 注:零碎中产生的每个item对象,将通过settings.py配置的所有pipline对象。 2.2.5. items.py用于定义不同种数据类型的数据字典,每个属性都是Field类型; 2.2.6. spider目录用于寄存Spider子类定义,scrapy启动爬虫过程中将依照spider类中name属性进行加载和调用。 2.3. 爬虫性能扩大阐明2.3.1. user\_agents\_middleware.py通过procces_request办法,为request对象增加hearder信息,随机模仿多种浏览器的User-Agent信息进行网络申请。 2.3.2. proxy_server.py通过procces_request办法,为reques对象增加网络代理信息,随机模仿多IP调用。 2.3.3. db\_connetion\_pool.py 文件地位 db\_manager/db\_connetion_pool.py,文件定义了根底的数据连接池,不便零碎各环节操作数据库。 2.3.4. redis\_connention\_pool.py文件地位db\_manager/ redis\_connention_pool.py,文件定义了根底的Redis连接池,不便零碎各环节操作Redis缓存。 2.3.5. scrapy_redis包scrapy_redis包是对scrapy框架的扩大,采纳Redis作为申请队列,存储爬虫工作信息。 spiders.py文件:定义分布式RedisSpider类,通过笼罩Spider类start\_requests()办法的形式,从Redis缓存中获取初始申请列表信息。其中RedisSpider子类须要为redis\_key赋值。 pipelines.py文件:定义了一种简略的数据存储形式,能够间接将item对象序列化后保留到Redis缓存中。 dupefilter.py文件:定义数据去重类,采纳Redis缓存的形式,曾经保留的数据将增加到过滤队列中。 queue.py文件:定义几种不同的入队和出队程序的队列,队列采纳Redis存储。 ...

May 4, 2023 · 3 min · jiezi

关于python:Python-数据可视化实践使用-Matplotlib-绘制图表

数据可视化是数据分析的重要环节,通过将数据转化为图形,能够更直观地展现数据特色和法则。Python 中的 Matplotlib 库是一个弱小的数据可视化工具,本文将带您理解 Matplotlib 的根本应用办法,以及如何绘制常见的图表。 一. Matplotlib 简介Matplotlib 是一个用于创立高质量图形的 Python 库。它反对多种操作系统和图形后端,提供丰盛的图表类型和性能。应用 Matplotlib,您能够轻松绘制折线图、柱状图、饼图等各种图表,满足不同数据可视化需要。 二. 装置与导入装置 Matplotlib 的办法很简略,只需在命令行中执行如下命令: pip install matplotlib装置实现后,在 Python 脚本中导入 Matplotlib,并应用 pyplot 子模块进行绘图: import matplotlib.pyplot as plt三. 根本绘图操作Matplotlib 提供了丰盛的绘图接口,上面简要介绍几种常见的图表绘制办法。 1. 折线图折线图是一种罕用的数据可视化形式,能够展现数据随工夫或其余变量的变化趋势。应用 Matplotlib 绘制折线图的办法如下: x = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]plt.plot(x, y)plt.show()2. 柱状图柱状图用于示意不同类别之间的比拟。绘制柱状图的办法如下: x = ['A', 'B', 'C', 'D', 'E']y = [3, 5, 7, 9, 11]plt.bar(x, y)plt.show()3. 饼图饼图用于展现各局部占总体的比例。绘制饼图的办法如下: labels = ['A', 'B', 'C', 'D', 'E']sizes = [15, 30, 45, 10, 20]plt.pie(sizes, labels=labels, autopct='%1.1f%%')plt.show()四. 图表定制Matplotlib 提供了丰盛的图表定制选项,如设置题目、坐标轴标签、图例等。以下是一些常见的定制操作: ...

May 4, 2023 · 1 min · jiezi

关于python:学习python太枯燥一招让你爱上学python

如果你认为学习编程须要看枯燥乏味的教科书,那么你就大错特错了!当初,有一种全新的学习形式,让你在观赏风行漫画的同时轻松把握Python编程的技巧! 《看漫画学Python》是一本独特而又乏味的书箱。它不仅仅是一本漫画书,更是一本将Python编程概念娓娓道来的教材。独特的视觉和语言表达形式,让你能够轻松了解Python的基础知识,并把握理论编程中的技巧。 从根底语法、变量、运算符到流程管制、函数、模块,每个Python编程的重要畛域都被活泼形象地出现在你背后。不同于传统编程教材的枯燥乏味,这本书箱总是充斥了风趣、乏味的漫画和对应的代码实例,让你轻松学习、轻松上手,甚至还能激发你对编程的创造性设想。 如果你是一个Python编程的初学者,或者对于学习编程感到困惑,那么《看漫画学Python》是你的最佳抉择。它将让你迅速把握Python编程常识,从此开启一段充斥创造力和乐趣的编程之旅。 当初就来体验《看漫画学Python》带来的惊喜吧! 获取形式:关注同名公众号,后盾回复:6781,获取云盘下载地址。

May 4, 2023 · 1 min · jiezi

关于python:Python量化交易工程师养成实战金融高薪领域风吹旷野纸钱飞

download:Python量化交易工程师养成实战-金融高薪畛域产品思维:让你的产品更加用户导向 在当今竞争强烈的市场中,要想打造一款胜利的产品并不容易。而要想真正做好产品,就须要有一种被称为“产品思维”的理念。那么什么是产品思维呢?它又有哪些特点和劣势呢? 简略来说,产品思维就是一种以用户需要为导向来开发和设计产品的思维形式。与传统的技术或工程思维不同,产品思维将用户体验放在首位,并且提倡通过数据分析和用户反馈来继续改良产品。这样能够让企业更加聚焦用户需要,进步产品的满意度和市场份额。 那么产品思维又有哪些特点呢?首先,它强调用户体验。在传统的产品开发过程中,往往由技术人员主导,而对用户体验的关注则绝对较少。而产品思维则将用户体验作为外围,一直优化产品的界面、性能和操作流程等方面,从而实现更好的用户体验。 其次,产品思维具备敏锐的市场洞察力。基于对用户需要的深刻理解,产品思维可能更好地把握市场变化趋势,及时调整产品的策略和方向。这样能够让企业始终保持在市场的前沿,抢占竞争劣势。 最初,产品思维强调数据驱动。通过对用户行为、应用习惯等数据进行剖析,产品思维可能及时理解用户需要和反馈,并以此作为产品改良的根据。这样能够让企业更加聚焦于用户需要,一直进步产品的满意度和市场份额。 总之,产品思维是一种十分重要的理念,它可能让企业更加聚焦于用户需要,强化市场洞察力,并通过数据分析继续改良产品。因而,如果您心愿打造一款胜利的产品,那么就请务必遵循产品思维,将用户体验放在首位,一直迭代优化,为用户提供更好的产品体验。

May 3, 2023 · 1 min · jiezi

关于python:Python-中的正则表达式强大的文本处理工具

正则表达式(RegEx)是一种弱小的文本处理工具,它能够帮忙咱们匹配、查找和替换文本中的特定模式。在 Python 中,正则表达式由 re 模块提供反对。在本文中,咱们将探讨 re 模块中的一些次要函数和办法,以及如何应用正则表达式进行高效的文本处理。 一. 基本概念正则表达式是一种非凡的字符序列,用于形容一个字符串模式。常见的正则表达式元字符包含: .:匹配任意单个字符(除了换行符)^:匹配字符串的结尾$:匹配字符串的结尾*:匹配后面的字符零次或屡次+:匹配后面的字符一次或屡次?:匹配后面的字符零次或一次{m,n}:匹配后面的字符 m 到 n 次[...]:匹配字符集中的任意一个字符1:匹配不在字符集中的任意一个字符\d:匹配任意数字字符\D:匹配任意非数字字符\s:匹配任意空白字符\S:匹配任意非空白字符\w:匹配任意字母、数字或下划线字符\W:匹配任意非字母、数字或下划线字符 二. re 模块罕用函数Python 的 re 模块提供了一系列函数,用于解决正则表达式。以下是一些罕用函数的简要介绍: re.match(pattern, string, flags=0):从字符串结尾开始匹配正则表达式。如果匹配胜利,则返回一个匹配对象;否则返回 None。re.search(pattern, string, flags=0):在整个字符串中搜寻正则表达式的匹配项。如果找到匹配项,则返回一个匹配对象;否则返回 None。re.findall(pattern, string, flags=0):返回字符串中所有与正则表达式匹配的非重叠项的列表。re.finditer(pattern, string, flags=0):返回一个迭代器,该迭代器生成字符串中与正则表达式匹配的所有非重叠项的匹配对象。re.sub(pattern, repl, string, count=0, flags=0):应用指定的替换字符串(repl)替换与正则表达式匹配的所有子字符串,并返回替换后的字符串。re.compile(pattern, flags=0):将正则表达式字符串编译为一个正则表达式对象,该对象具备与 re 模块雷同的办法。预编译正则表达式能够进步屡次应用雷同模式的性能。三. 匹配对象及其办法当应用 re.match() 或 re.search() 函数胜利匹配时,它们会返回一个匹配对象。匹配对象具备一些有用的办法,如下所示: group():返回匹配的字符串。start():返回匹配字符串在原始字符串中的起始地位。end():返回匹配字符串在原始字符串中的完结地位(不包含)。span():返回一个元组,其中蕴含匹配字符串在原始字符串中的起始和完结地位。 四. 示例上面的示例演示了如何应用 Python 的 re 模块进行正则表达式匹配和替换。 import re# 匹配电子邮件地址pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'text = "Please send your feedback to support@example.com."match = re.search(pattern, text)if match: print("Email found:", match.group())else: print("No email found")# 替换 URLpattern = r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'text = "Visit our website at http://www.example.com."replacement = "<URL>"result = re.sub(pattern, replacement, text)print("Replaced text:", result)五. 总结正则表达式是解决文本的弱小工具,能够帮忙咱们实现简单的文本匹配、查找和替换工作。Python 的 re 模块提供了一系列函数和办法,用于解决正则表达式。把握正则表达式的基本概念和应用办法,对编写高效、可读的 Python 代码至关重要。 ...

May 3, 2023 · 1 min · jiezi

关于python:multiprocessinggetcontext-的参数可以填什么

Q:python 的 multiprocessing.get_context 函数的参数,除了 spawn 和 fork 和 forkserver 和 threading 还能够填什么?A:multiprocessing.get_all_start_methods():返回一个列表,蕴含了以后零碎反对的所有启动办法,包含上述四种和其余零碎特定的启动办法。能够通过循环这个列表,尝试应用不同的启动办法创立过程,以寻找最合适的形式。

May 2, 2023 · 1 min · jiezi

关于python:Python在人工智能和爬虫领域的应用

随着人工智能技术的一直倒退,越来越多的公司开始关注如何利用人工智能技术来进步业务效率和发明更多价值。而Python作为一种易学易用的编程语言,也成为了人工智能和爬虫开发中的重要工具。 人工智能中Python的利用Python是一种高级语言,因其简略易懂、代码量少、可读性强等特点而受到宽泛的欢送。在人工智能中,Python也被广泛应用于数据分析、机器学习、深度学习等畛域。以下是Python在人工智能中的一些利用: 数据分析:Python中的pandas库能够帮忙开发者对数据进行荡涤、转换和剖析,同时matplotlib库提供了丰盛的可视化图表。机器学习:Python中的Scikit-learn库能够帮忙开发者构建机器学习模型,包含分类、聚类、回归等算法,并提供了许多实现这些算法的办法。深度学习:Python中的TensorFlow和PyTorch等深度学习框架使得开发者能够轻松地构建、训练和优化神经网络。爬虫中Python的利用在互联网时代,爬虫技术成为了获取大量数据的重要伎俩。而Python因其简略易用、开发效率低等特点,成为了爬虫畛域中最受欢迎的编程语言。以下是Python在爬虫畛域中的一些利用: 网络申请:Python中的requests库使得爬虫能够轻松地发送HTTP申请和解决响应,同时BeautifulSoup库能够帮忙开发者解析HTML文档。数据存储:Python中的MongoDB和MySQL等数据库能够存储爬取到的数据,并且Scrapy框架提供了弱小的数据存储反对。自动化测试:Python的selenium库能够模仿用户在浏览器中的操作,实现自动化测试和爬虫。在人工智能和爬虫畛域中,咱们常常须要用到Python进行编程。上面就别离给大家介绍一些Python代码例子:数据分析Pandas是Python中十分驰名的数据分析库,它能够帮忙咱们对数据进行荡涤、转换和剖析。以下是一个简略的Pandas代码例子: import pandas as pddata = pd.read_csv('data.csv')data.head()这个代码片段能够读取一个CSV文件,并输入前5行数据。 机器学习Scikit-learn是Python中十分风行的机器学习库,它能够帮忙咱们构建各种类型的机器学习模型。以下是一个简略的Scikit-learn代码例子: from sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressioniris = datasets.load_iris()X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)clf = LogisticRegression()clf.fit(X_train, y_train)score = clf.score(X_test, y_test)print(score)这个代码片段能够读取Iris数据集,并应用逻辑回归算法来训练模型,并计算出模型的准确率。 深度学习TensorFlow是Python中最风行的深度学习框架之一,它能够帮忙咱们构建各种类型的神经网络。以下是一个简略的TensorFlow代码例子: import tensorflow as tfmnist = tf.keras.datasets.mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()x_train, x_test = x_train / 255.0, x_test / 255.0model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10)])predictions = model(x_train[:1]).numpy()print(predictions)loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])model.fit(x_train, y_train, epochs=5)model.evaluate(x_test, y_test, verbose=2)这个代码片段能够读取MNIST数据集,并应用神经网络来训练模型,并计算出模型的准确率。 ...

May 2, 2023 · 1 min · jiezi

关于python:从零开始学习-Python-网络爬虫使用-Beautiful-Soup-解析网页

在这篇文章中,咱们将介绍如何应用 Python 编写一个简略的网络爬虫,以获取并解析网页内容。咱们将应用 Beautiful Soup 库,它是一个十分弱小的库,用于解析和操作 HTML 和 XML 文档。让咱们开始吧! 一. 装置 Beautiful Soup首先,您须要装置 Beautiful Soup。在终端或命令提示符中运行以下命令: pip install beautifulsoup4此外,咱们还须要一个 HTTP 库来发送网络申请。在本教程中,咱们将应用 requests 库。如果您尚未装置它,请运行以下命令: pip install requests二. 发送 HTTP 申请当初,咱们曾经装置了所需的库,让咱们开始编写网络爬虫。首先,咱们须要发送一个 HTTP 申请以获取网页内容。以下是如何应用 requests 库发送 GET 申请的示例: import requestsurl = 'https://www.example.com'response = requests.get(url)print(response.text)三. 解析 HTML接下来,咱们将应用 Beautiful Soup 解析 HTML。首先,咱们须要导入库,而后创立一个 Beautiful Soup 对象。以下是一个示例: from bs4 import BeautifulSoupsoup = BeautifulSoup(response.text, 'html.parser')四. 提取信息当初咱们曾经创立了一个 Beautiful Soup 对象,咱们能够应用它来提取网页中的信息。以下是一些常见的提取办法: 应用标签名称提取元素: title = soup.title应用属性提取元素: div = soup.find('div', {'class': 'example-class'})提取元素的文本: ...

May 2, 2023 · 1 min · jiezi

关于python:ubuntu2204-可以安装-python37-吗

具体怎么装置,能够参考:Ubuntu20.04 从源代码编译装置 python3.10 在 ubuntu22.04 上,我曾经从源码编译装置了多个 python 了:3.7、3.8、3.9、3.11 ╭─pon@amd5700g ~ ╰─➤ cd ~/opt/python/cpython/╭─pon@amd5700g ~/opt/python/cpython ╰─➤ ll inode Permissions Links Size Blocks User Group Date Modified Name17728017 drwxrwxr-x 6 - - pon pon 2 5月 01:25 python3.716261056 drwxrwxr-x 6 - - pon pon 14 1月 19:34 python3.816275536 drwxrwxr-x 6 - - pon pon 14 1月 19:34 python3.916663293 drwxrwxr-x 6 - - pon pon 5 2月 21:32 python3.11

May 2, 2023 · 1 min · jiezi

关于python:非抄袭AttributeError-module-‘lib‘-has-no-attribute-OpenSSLadd

网络做法翻了下帖子,全副是降级,openssl和crypto两个库 # ImportError: cannot import name 'SSLv3_METHOD' from 'OpenSSL.SSL'pip3 install pyopenssl==22.0.0# AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'pip3 install cryptography==38.0.4来自:https://stackoverflow.com/questions/73859249/attributeerror-module-openssl-ssl-has-no-attribute-sslv3-method,其余的基本上都是这个抄的(或者说转载的)。 我试了。两个都曾经requirement already satisfied了,还是始终出这个错。又看到说,如果不行,再持续降级。我随即试了cryptography==38.0.4到38.0.1。 没卵用 那我想,既然是version不匹配,那我就间接全副升级成最新的吧。于是 pip install pyopenssl==lastestERROR: Could not find a version that satisfies the requirement pyopenssl==lastest (from versions: 0.6, 0.7, 0.8, 0.9, 0.10, 0.12, 0.13, 0.13.1, 0.14, 0.15, 0.15.1, 16.0.0, 16.1.0, 16.2.0, 17.0.0, 17.1.0, 17.2.0, 17.3.0, 17.4.0, 17.5.0, 18.0.0, 19.0.0, 19.1.0, 20.0.0, 20.0.1, 21.0.0, 22.0.0, 22.1.0, 23.0.0, 23.1.0, 23.1.1)ERROR: No matching distribution found for pyopenssl==lastestpip install cryptography==lastestERROR: Could not find a version that satisfies the requirement cryptography==lastest (from versions: 0.1, 0.2, 0.2.1, 0.2.2, 0.3, 0.4, 0.5, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.6, 0.6.1, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.8.2, 0.9, 0.9.1, 0.9.2, 0.9.3, 1.0, 1.0.1, 1.0.2, 1.1, 1.1.1, 1.1.2, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.3, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.7, 1.7.1, 1.7.2, 1.8, 1.8.1, 1.8.2, 1.9, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.2, 2.2.1, 2.2.2, 2.3, 2.3.1, 2.4, 2.4.1, 2.4.2, 2.5, 2.6, 2.6.1, 2.7, 2.8, 2.9, 2.9.1, 2.9.2, 3.0, 3.1, 3.1.1, 3.2, 3.2.1, 3.3, 3.3.1, 3.3.2, 3.4, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 35.0.0, 36.0.0, 36.0.1, 36.0.2, 37.0.0, 37.0.1, 37.0.2, 37.0.3, 37.0.4, 38.0.0, 38.0.1, 38.0.2, 38.0.3, 38.0.4, 39.0.0, 39.0.1, 39.0.2, 40.0.0, 40.0.1, 40.0.2)ERROR: No matching distribution found for cryptography==lastest找了下他们最新的,而后别离pip install了最新的。没用!还是 呈现如题的谬误。 ...

May 1, 2023 · 2 min · jiezi

关于python:pyton基础语法

Python 是一门脚本语言。脚本语言是一种介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++ 等编程语言之间的一种非凡的语言,只管它更靠近后者,但它却不具备编程语言简单、谨严的语法和规定。 有一些脚本语言曾经产生了变动,如 Python,perl 曾经能够编译成中间代码而后执行,这样的脚本语言曾经能够被称为编译型脚本语言。 脚本语言的“劣势”,其实只在于它不须要当时“编译”。所以 Python 语言不必像 Java 或者 C++ 语言须要首先进行编译,再进行运行,脚本语言能够间接读取文本文件,一边解释一边执行。 Python 是一门独特的脚本语言,疾速浏览一下他的要点: 面向对象 :每一个变量都是一个类,有其本人的 属性(attribute) 与 办法(method) 。语法块 :用缩进(四个空格)而不是分号、花括号等符号来标记。因而,行首的空格不能随便书写。正文 :行内用“#”号,行间正文写在两组间断三单引号之间:’’’续行 :行尾输出一个反斜杠加一个空格(’\ ‘),再换行。如果行尾语法显著未实现(比方以逗号结尾),能够间接续行。打印与输出 : 函数 print() 与 input(),留神 print() 的 sep 与 end 参数。变量 :无需指定变量类型,也不须要提前申明变量。删除变量:del()复制变量:间接将变量a赋值给b,有时仅仅复制了一个“援用”。尔后 b 与 a 的改变仍会相互影响。必要时应用 a is b 来判断是否同址。模块 :通过 import pandas 的形式加载模块(或者 import pandas as pd),并用形如 pandas.DataFrame(或 pd.DataFrame)的形式调用模块内的办法。也能够应用 from pandas import DataFrame 的形式,这样在下文能够间接应用 DataFrame 作为调用名。帮忙 :配合应用 dir() 与 help() 命令;其中前者是输入变量所有的成员。更多内容能够看原文章:https://www.writebug.com/article/930f464e-c790-11ed-99c5-6479... ...

May 1, 2023 · 1 min · jiezi

关于python:用-Python-和-OpenCV-实现图像处理基础

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,为 Python 和其余编程语言提供了丰盛的图像处理性能。在本文中,咱们将介绍如何应用 Python 和 OpenCV 实现图像的根本解决操作,如读取、显示、保留、缩放、旋转等。 一. 装置 OpenCV首先,咱们须要装置 OpenCV 库。在命令行中应用 pip 进行装置: pip install opencv-python二. 读取、显示和保留图像应用 OpenCV 读取、显示和保留图像非常简单。以下是一个简略的示例: import cv2# 读取图像image = cv2.imread('example.jpg')# 显示图像cv2.imshow('Image', image)cv2.waitKey(0)cv2.destroyAllWindows()# 保留图像cv2.imwrite('example_copy.jpg', image)三. 缩放图像OpenCV 提供了 cv2.resize() 函数,能够用来调整图像的尺寸。以下是一个示例: import cv2image = cv2.imread('example.jpg')height, width = image.shape[:2]# 缩放图像scaled_image = cv2.resize(image, (width // 2, height // 2), interpolation=cv2.INTER_LINEAR)# 显示原图像和缩放后的图像cv2.imshow('Original Image', image)cv2.imshow('Scaled Image', scaled_image)cv2.waitKey(0)cv2.destroyAllWindows()四. 旋转图像要旋转图像,咱们能够应用 cv2.getRotationMatrix2D() 和 cv2.warpAffine() 函数。以下是一个示例: import cv2image = cv2.imread('example.jpg')height, width = image.shape[:2]# 获取旋转矩阵rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 45, 1)# 旋转图像rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height))# 显示原图像和旋转后的图像cv2.imshow('Original Image', image)cv2.imshow('Rotated Image', rotated_image)cv2.waitKey(0)cv2.destroyAllWindows()五. 色调空间转换OpenCV 反对多种色调空间转换,例如从 BGR(默认)转换为灰度图像或者 HSV 空间。以下是一个示例: ...

May 1, 2023 · 1 min · jiezi

关于python:Python实战用Selenium爬取网页数据

网络爬虫是Python编程中一个十分有用的技巧,它能够让您主动获取网页上的数据。在本文中,咱们将介绍如何应用Selenium库来爬取网页数据,特地是那些须要模仿用户交互的动静网页。 一. 什么是Selenium?Selenium是一个自动化测试工具,它能够模仿用户在浏览器中的操作,比方点击按钮、填写表单等。与罕用的BeautifulSoup、requests等爬虫库不同,Selenium能够解决JavaScript动静加载的内容,因而对于那些须要模仿用户交互能力获取的数据,Selenium是一个十分适合的抉择。 二. 装置Selenium要应用Selenium,首先须要装置它。您能够应用pip命令来装置Selenium库: pip install selenium装置实现后,还须要下载一个与Selenium配套应用的浏览器驱动程序。本文以Chrome浏览器为例,您须要下载与您的Chrome浏览器版本对应的ChromeDriver。下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads 下载并解压缩后,将chromedriver.exe文件放到一个适合的地位,并记住该地位,稍后咱们须要在代码中应用。 三. 爬取网页数据上面是一个简略的示例,咱们将应用Selenium爬取一个网页,并输入页面题目。 from selenium import webdriver# 指定chromedriver.exe的门路driver_path = r"C:\path\to\chromedriver.exe"# 创立一个WebDriver实例,指定应用Chrome浏览器driver = webdriver.Chrome(driver_path)# 拜访指标网站driver.get("https://www.example.com")# 获取网页题目page_title = driver.titleprint("Page Title:", page_title)# 敞开浏览器driver.quit()四. 模仿用户交互Selenium能够模仿用户在浏览器中的各种操作,如点击按钮、填写表单等。以下是一个示例,咱们将应用Selenium在网站上进行登录操作: from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver_path = r"C:\path\to\chromedriver.exe"driver = webdriver.Chrome(driver_path)driver.get("https://www.example.com/login")# 定位用户名和明码输入框username_input = driver.find_element_by_name("username")password_input = driver.find_element_by_name("password")# 输出用户名和明码username_input.send_keys("your_username")password_input.send_keys("your_password")# 模仿点击登录按钮login_button = driver.find_element_by_xpath("//button[@type='submit']")login_button.click()# 其余操作...# 敞开浏览器driver.quit()通过联合Selenium的各种性能,您能够编写弱小的网络爬虫来爬取各种网站上的数据。但请留神,在进行网络爬虫时,务必恪守指标网站的robots.txt规定,并尊重网站的数据抓取政策。另外,过于频繁的爬取可能会给网站带来累赘,甚至触发反爬机制,因而倡议正当管制爬取速度。 五. 解决动静加载内容对于一些动静加载内容的网站,咱们能够利用Selenium提供的显式期待和隐式期待机制,以确保网页上的元素曾经加载实现。 1. 显式期待显式期待指的是设置一个具体的期待条件,期待某个元素在指定工夫内满足条件。 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver_path = r"C:\path\to\chromedriver.exe"driver = webdriver.Chrome(driver_path)driver.get("https://www.example.com/dynamic-content")# 期待指定元素呈现,最多期待10秒element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "dynamic-element-id")))# 操作该元素...driver.quit()2. 隐式期待隐式期待是设置一个全局的等待时间,如果在这个工夫内元素未呈现,将引发一个异样。 ...

April 30, 2023 · 1 min · jiezi

关于python:Python技术探讨异常处理的艺术

在编写Python代码的过程中,咱们经常会遇到各种谬误和异样。学会无效地解决这些异样,能够让咱们的程序更加强壮、稳固。本文将带您深刻理解Python异样解决的艺术,让您的代码更加完满! 一. 异样简介异样是在程序执行过程中产生的事件,通常示意代码中存在谬误或异常情况。Python提供了一套异样解决机制,帮忙咱们捕捉和处理程序中的异样。 二. 常见异样类型Python内置了许多异样类型,例如: ValueError:传递给函数的参数类型正确,但值不适合。TypeError:操作或函数利用于不适当类型的对象。FileNotFoundError:申请的文件未找到。ZeroDivisionError:除数为零。三. try-except语句通过应用try-except语句,咱们能够捕捉程序中可能呈现的异样,并对其进行解决。根本语法如下: try: # 可能引发异样的代码块except ExceptionType: # 异样解决代码四. 捕捉多个异样类型能够在一个try-except语句中捕捉多个异样类型,只需在except子句中应用括号蕴含多个异样类型即可。示例: try: # 可能引发异样的代码块except (ExceptionType1, ExceptionType2): # 异样解决代码五. 获取异样信息在except子句中,咱们能够应用as关键字获取具体的异样信息。示例: try: # 可能引发异样的代码块except ValueError as ve: print(f"捕捉到异样:{ve}")六. finally子句finally子句能够与try-except语句配合应用,无论是否捕捉到异样,finally子句中的代码都会被执行。示例: try: # 可能引发异样的代码块except ValueError: # 异样解决代码finally: # 无论是否产生异样,都会执行的代码七. 自定义异样Python容许咱们自定义异样类,只需继承内置的BaseException类即可。自定义异样有助于更好地辨认和处理程序中的特定谬误状况。 舒适提醒:把握异样解决是成为Python高手的必备技能。理解异样解决的艺术,让您的代码更加强壮!#Python技术探讨##异样解决##编程技巧#

April 29, 2023 · 1 min · jiezi

关于python:PyCharm-20223-激活破解码安装教程

第一步:下载 Pycharm 安装包拜访 Pycharm 官网,下载 Pycharm 2022.3 版本的安装包,下载链接如下 :https://www.jetbrains.com/pycharm/download关上页面后,点击 Download 按钮, 期待 Pycharm 专业版下载结束 第二步:装置 Pycharm 2022.3 版本如果电脑之前有装置老版本 Pycharm, 须要先卸载。卸载实现后,双击刚刚下载好的 Pycharm 2022.3 版本安装包。弹框会提醒抉择装置门路,我这里间接抉择的默认装置门路C:\Program Files\JetBrains\IntelliJ Pycharm 2022.3 , 而后点击 Next 按钮:而后,勾选 Create Desktop Shortcut 创立 Pycharm 桌面快捷启动形式,以不便前面疾速关上 Pycharm,再点击 Next 按钮 :点击 Install 按钮,开始装置:期待装置实现后,勾选 Run IntellJ Pycharm, 点击 Finish 按钮即运行 Pycharm :Pycharm 运行胜利后,会弹出如下对号框,强制用户须要先登录 JetBrains 账户能力应用:不必管登录的事,点击 Exit 按钮退出对话框,配备开始破解激活。 第三步:破解补丁下载破解补丁我搁置在了网盘中,提供了多个备用链接,以防下载生效。提醒:破解补丁的网盘链接文末获取~补丁下载胜利后,记得先解压 **, 解压后的目录如下, 本文前面所需补丁都在上面标注的这个文件夹中:公Z号Python指南回复【bbb】获取点击【形式3】文件夹 , 进入到文件夹 /jetbra,目录如下: 第四步:开始破解Windows用户将下面图示的补丁的所属文件夹 /jetbra 复制电脑某个地位,笔者这里搁置到了 D:/ 盘根目录下:留神: 补丁所属文件夹需独自寄存,且搁置的门路不要有中文与空格,免得 Pycharm 读取补丁谬误。点击进入 /jetbra 补丁目录,再点击进入 /scripts 文件夹,双击执行 install-current-user.vbs 破解脚本:留神:如果执行脚本被安全软件提醒有危险拦挡,容许执行即可。会提醒装置补丁须要期待数秒。点击【确定】按钮后,过程大略 10 - 30 秒,如看到弹框提醒 Done 时,示意激活破解胜利:Mac / Linux 用户Mac / Linux 零碎与下面 Windows 零碎一样,需将补丁所属文件 /jetbra 复制到某个门路,且门路不能蕴含空格与中文。之后,关上终端,进入到 /jetbra/scripts 文件夹, 执行 install.sh 脚本, 命令如下:sudo bash install.sh看到提醒 Done , 示意激活胜利。局部小伙伴 Mac 零碎执行脚本遇到如下谬误:解决办法:可先执行如下命令,再执行脚本:export LC_COLLATE='C'export LC_CTYPE='C'执行脚本,都干了些啥?Windows 用户执行脚本后,脚本会主动在环境变量 -> 用户变量下增加了 Pycharm_VM_OPTIONS 变量,变量值为 /jetbra 文件夹下的 .vmoptions 参数文件绝对路径,如下所示:而后,脚本主动在 pycharm.vmoptions 文件中援用了破解补丁 :Mac / Linux 用户执行脚本后,脚本会主动在当期用户环境变量文件中增加了相干参数文件,Mac / Linux 需重启零碎,以确保环境变量失效。小伙伴们也可自行检查一下,如果没有主动增加这些参数,阐明脚本执行没有胜利。 ...

April 28, 2023 · 1 min · jiezi

关于python:Python实践使用Pandas进行数据分析

在数据分析畛域,Python的Pandas库是一个十分弱小的工具。本文将为您介绍如何应用Pandas进行数据分析。 首先,确保您曾经装置了Pandas库。如果没有,请应用以下命令装置: pip install pandas一. 导入Pandas库import pandas as pd二. 读取数据Pandas能够轻松读取多种数据格式,如CSV、Excel、JSON、HTML等。以下是读取CSV文件的示例: data = pd.read_csv('data.csv')其余数据格式的读取办法相似,如读取Excel文件: data = pd.read_excel('data.xlsx')三. 查看数据能够应用head()函数查看数据的前几行(默认为5行): print(data.head())还能够应用tail()函数查看数据的后几行,以及info()和describe()函数查看数据的统计信息: print(data.tail())print(data.info())print(data.describe())四. 抉择数据抉择数据的形式有很多,以下是一些罕用办法: 抉择某列:data['column_name']抉择多列:data[['column1', 'column2']]抉择某行:data.loc[row_index]抉择某个值:data.loc[row_index, 'column_name']通过条件抉择:data[data['column_name'] > value]五. 数据荡涤在数据分析之前,通常须要对数据进行荡涤。以下是一些罕用的数据荡涤办法: 去除空值:data.dropna()替换空值:data.fillna(value)重命名列名:data.rename(columns={'old_name': 'new_name'})数据类型转换:data['column_name'].astype(new_type)去除反复值:data.drop_duplicates()六. 数据分析Pandas提供了丰盛的数据分析性能,以下是一些罕用办法: 计算平均值:data['column_name'].mean()计算中位数:data['column_name'].median()计算众数:data['column_name'].mode()计算标准差:data['column_name'].std()计算相关性:data.corr()数据分组:data.groupby('column_name')七. 数据可视化Pandas能够轻松地将数据转换为可视化图表。首先,须要装置Matplotlib库: pip install matplotlib而后,应用以下代码创立图表: import matplotlib.pyplot as pltdata['column_name'].plot(kind='bar')plt.show()其余可视化图表类型包含折线图、饼图、直方图等: data['column_name'].plot(kind='line')data['column_name'].plot(kind='pie')data['column_name'].plot(kind='hist')plt.show()八. 导出数据Pandas能够将数据导出为多种格局,如CSV、Excel、JSON、HTML等。以下是将数据导出为CSV文件的示例: data.to_csv('output.csv', index=False)其余数据格式的导出办法相似,如导出为Excel文件: data.to_excel('output.xlsx', index=False)九. 实战案例假如咱们有一份销售数据(sales_data.csv),咱们心愿对其进行剖析。首先,咱们须要读取数据: import pandas as pddata = pd.read_csv('sales_data.csv')而后,咱们能够对数据进行荡涤和剖析。例如,咱们能够计算每个产品的销售额: data['sales_amount'] = data['quantity'] * data['price']接下来,咱们能够剖析哪个产品的销售额最高: max_sales = data.groupby('product_name')['sales_amount'].sum().idxmax()print(f'最高销售额的产品是:{max_sales}')最初,咱们能够将后果导出为CSV文件: data.to_csv('sales_analysis.csv', index=False)总结Pandas库是Python中十分弱小的数据分析工具,它提供了丰盛的数据处理、荡涤、剖析和可视化性能。把握Pandas库的应用,将大大提高您在数据分析畛域的工作效率。

April 28, 2023 · 1 min · jiezi

关于python:验证码逆向专栏某验全家桶细节避坑总结

申明本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关! 本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】分割作者立刻删除! 前言某验的验证码总体来说还是很简略的,然而也有一些细节可能要留神一下,如果你扣完算法发现验证报各种各样的谬误,或者在官网的 demo 能验证通过,在其余网站却验证失败,那么就能够看看本文总结的细节你有没有留神到。 除此之外,本文还分享了一些验证码的辨认计划、轨迹的解决,这些办法大多来自网络上其余大佬的分享,间接百度就能搜到,本文只是做了一个演绎总结。 对于 w 值三代外面,有几个接口申请都有 w,但除了最初一个校验接口 ajax.php 以外,其余接口的 w 能够置空,但也不齐全都是这样,比方三代的一键通过模式(无感验证),在申请 get.php 接口获取 c 和 s 值的时候,同样校验了 w 值,因而须要获取两次 w 值,而这两次 w 值的生成形式还不太一样,须要本人仔细分两次扣一下。如果你第一次不带 w,或者 w 生成谬误,就会报以下谬误: {'status': 'error', 'error': 'param decrypt error', 'user_error': '网络不给力', 'error_code': 'error_03'}对于工夫距离三代外面,整个流程走得太快了也是不行的,须要在生成 w 值之后,随机停留个 2 秒左右,以三代的点选(文字点选、图标点选、语序点选、空间推理)为例,如果整得太快了验证失败会报以下谬误: {'status': 'success', 'data': {'result': 'fail', 'msg': ['duration short']}}对于 challenge三代外面,有个 challenge 参加了很多接口的申请,三代滑块比拟非凡,第一次获取到了一个 challenge,前面的第二个 get.php 申请返回数据里会有一个新的 challenge,新的 challenge 比第一次的 challenge 多了两位数,后续的申请要用这个新的 challenge 才行,不然的话会报以下谬误: {'success': 0, 'message': 'fail'}对于 c 和 s三代外面,有个 c 和 s 的值参加了 w 的计算,点选系列和滑块,第一次 get.php 申请会返回一个 c 和 s,第二次 get.php 申请也会返回一个 c 和 s,两次的 c 个别是不变的,但 s 会变,生成 w 要用第二次 get.php 返回的 s 才行,不然的话会报以下谬误: ...

April 28, 2023 · 6 min · jiezi

关于python:0基础学爬虫爬虫基础之自动化工具-Playwright-的使用

大数据时代,各行各业对数据采集的需要日益增多,网络爬虫的使用也更为宽泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前曾经推出不少爬虫进阶、逆向相干文章,为实现从易到难全方位笼罩,特设【0根底学爬虫】专栏,帮忙小白疾速入门爬虫,本期为自动化工具 playwright 的应用。概述上期文章中讲到了自动化工具 Selenium 的根本应用办法,也介绍了 Selenium 的优缺点。Selenium的性能十分弱小,反对所有古代浏览器。然而 Selenium 应用起来非常不不便,咱们须要提前装置好浏览器,而后下载对应版本的驱动文件,当浏览器更新后驱动文件也得随之更新。如果想要大规模且长期的采集数据,那么部署 Selenium 时环境配置会是一个大问题。因而本期咱们将介绍一款更加好用的自动化工具 Playwright 。 Playwright 的应用介绍Playwright是一个用于自动化Web浏览器测试和Web数据抓取的开源库。它由Microsoft开发,反对Chrome、Firefox、Safari、Edge和WebKit浏览器。Playwright的一个次要特点是它可能在所有次要的操作系统(包含Windows、Linux和macOS)上运行,并且它提供了一些弱小的性能,如跨浏览器测试、反对无头浏览器、并行执行测试、元素截图和模仿输出等。它次要有以下劣势: 兼容多个浏览器,而且所有浏览器都应用雷同的API。速度快、稳定性高,即便在大型、简单的Web应用程序中也能够运行。反对无头浏览器,因而能够在没有可见界面的状况下运行测试,从而进步测试效率。提供了丰盛的 API,以便于执行各种操作,如截图、模仿输出、拦挡网络申请等。装置应用 Playwright 须要 Python版本在3.7以上。 装置 Playwright 能够间接应用 pip 工具: pip install playwright 装置实现后须要进行初始化操作,装置所需的浏览器。 playwright install 执行上述指令时,Playwright 会主动装置多个浏览器(Chromium、Firefox 和 WebKit)并配置驱动,所以速度较慢。 应用Playwright 反对同步与异步两种模式,这里离开来进行解说。 同步应用 Playwright 时能够抉择启动装置的三种浏览器(Chromium、Firefox 和 WebKit)中的一种。 from playwright.sync_api import sync_playwright# 调用sync_playwright办法,返回浏览器上下文管理器with sync_playwright() as p: # 创立谷歌浏览器示例,playwright默认启动无头模式,设置headless=False,即敞开无头模式 browser = p.chromium.launch(headless=False) # 新建选项卡 page = browser.new_page() # 跳转到指标网址 page.goto("http://baidu.com") # 获取页面截图 page.screenshot(path='example.png') # 打印页面的题目,也就是title节点中的文本信息 print(page.title()) # 敞开浏览器 browser.close()# 输入:百度一下,你就晓得能够看到,Playwright 的应用也比较简单,语法比拟简洁,而且浏览器的启动速度以及运行速度也很快。 ...

April 28, 2023 · 2 min · jiezi

关于python:流畅的Python第二版上市了值得入手么

《Fluent Python》第一版在 2015 年出版,简体中文版《晦涩的Python》在 2017 年出版。从那时起,它就成为了所有 Python 程序员的必读之书。如果一份面向中高级 Python 开发者的书单里不蕴含这本书,那这份书单必定不合格! 《Fluent Python》第二版在 2022 年出版,最近,简体中文版《晦涩的Python》也隆重上市了! 在收到出版社的赠书后,我发了一条朋友圈,收到了很多点赞,以及征询最多的两个问题:新书相比于旧版,有什么区别?我是老手,这本书适宜我么? 本文将给大家解答这两个问题,另外在文末有赠书福利(送 10 本书),请不要错过哦~ 这本书适宜哪些读者?如果你是零根底的 Python 老手,那么这本书不适宜你,因为这本书“深刻分析 Python 语言外围个性及底层逻辑”,你可能会感觉它深奥超纲。 如果你是零根底的初学者,那么我举荐你浏览《Python编程:从入门到实际》、《看漫画学Python》这样的入门书籍。然而,在划走之前,请你肯定要珍藏本文,因为 Python 入门简略,置信你很快就会须要一本领导进阶的书籍了。 除了以上的读者群体外,《晦涩的Python》适宜于所有 Python 开发者/爱好者,特地地,如果你怀有以下的想法,那么这本书相对是不二之选: 想要更加熟练地把握 Python想要理解实用的编程技巧想写出纯粹、优雅、高效的 Python 代码想要把握 Python 最新的语言个性我在两年前写过一篇《如果只举荐一本 Python 书,我要 Pick 它!》,强烈推荐了第一版书籍,你能够从该文看到第一版次要内容的思维导图,以及我的举荐介绍。 如果你没听说过《晦涩的Python》,或者没读过第一版的书,我倡议你先读一下那篇文章。 在本文中,我次要面向曾经理解过这本书的读者,答复大家最为关切的两个疑难:曾经读过第一版了,是否还有必要读第二版呢?曾经领有了第一版书籍(不论实体书还是电子书),是否值得再买入第二版呢? 这本书新增了什么内容?《晦涩的Python》作者 Luciano Ramalho 是 Python 软件基金会成员,他深度参加了各类社区活动,熟知大量语言个性的设计过程和差别,他的书具备内容全面而新潮的特点。在第一版写作实现时,Python 3.5 版本还没公布,然而书中已蕴含了大量 3.5 版本的内容。 第一版英文书籍公布于 2015 年,那时社区中仍有较多 Python 2 用户旧调重弹,因而作者的附加用意之一就是展示 Python 3 的魅力,疏导老用户们进行迁徙。 在随后 7、8 年工夫里,Python 社区中产生了很多重大事件: 2015 年,PEP-484 被引入到 Python 3.5 版本,类型提醒开始迅猛发展2015 年以来,asyncio 引入了很多新个性,异步编程越来越好用2015 年 TensorFlow 公布,2016 年 PyTorch 公布,2017 年 AlphaGo 击败人类世界围棋冠军。2022 年 ChatGPT 公布,各种 AI 模型和利用变得不可胜数2018 年,Python 之父 Guido van Rossum 卸任“独裁者”,社区开始“领导委员会”治理模式2020 年,Python 2 彻底进行保护2023 年,PEP-684 被驳回,PEP-703 也有心愿被驳回,GIL 将迎来重大改革……第二版书籍从 2020 年初开始写作,他这次已不必特意思考 Python 2 用户了,重点是让读者相熟 Python 新的性能个性。 ...

April 28, 2023 · 2 min · jiezi

关于python:Python-字典Dictionary

字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key=>value 对用冒号 : 宰割,每个键值对之间用逗号 , 宰割,整个字典包含在花括号 {} 中 ,格局如下所示:d = {key1 : value1, key2 : value2 }键个别是惟一的,如果反复最初的一个键值对会替换后面的,值不须要惟一。 dict = {'a': 1, 'b': 2, 'b': '3'}dict['b']'3'dict{'a': 1, 'b': '3'}值能够取任何数据类型,但键必须是不可变的,如字符串,数字或元组。一个简略的字典实例:dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}转载文章,更多内容大家能够看原文章无关列表发更多常识。转载子{数字空间WRITRE-BUG}:https://www.writebug.com/article/931f4c00-c790-11ed-8656-6479...

April 27, 2023 · 1 min · jiezi

关于python:Python多线程编程入门指南

导语:在许多利用场景中,咱们须要同时执行多个工作。Python 提供了多线程(multithreading)反对,能够让咱们更高效地实现工作。在本文中,咱们将探讨 Python 中的多线程编程基础知识,并通过一个简略示例演示如何应用它。 一、并发编程简介并发编程是一种编程范式,容许多个工作在同时执行。在多核处理器和多处理器零碎中,这种办法能够显著进步程序的执行效率。Python 提供了多种并发编程办法,包含多线程、多过程和异步 I/O。 二、线程与过程线程是操作系统调度的最小单元,同一个过程中的多个线程共享内存空间和资源。过程是操作系统分配资源和治理工作的根本单位,每个过程有独立的内存空间和资源。多过程编程能够防止全局解释器锁(GIL)的限度,充分利用多核处理器的性能。 三、Python 中的多线程编程Python 的 threading 模块提供了多线程编程反对。应用 threading 模块,咱们能够创立、治理和同步线程。以下是一个简略的多线程示例: import threadingdef print_numbers(): for i in range(10): print(i)def print_letters(): for letter in 'abcdefghij': print(letter)t1 = threading.Thread(target=print_numbers)t2 = threading.Thread(target=print_letters)t1.start()t2.start()t1.join()t2.join()四、Python 中的异步 I/O异步 I/O 是另一种并发编程办法,它通过应用事件循环和回调函数来实现非阻塞的 I/O 操作。Python 的 asyncio 模块提供了异步 I/O 反对。应用 asyncio,咱们能够编写高效的、基于事件驱动的程序。以下是一个简略的异步 I/O 示例: import asyncioasync def print_numbers(): for i in range(10): print(i) await asyncio.sleep(1)async def print_letters(): for letter in 'abcdefghij': print(letter) await asyncio.sleep(1)async def main(): task1 = asyncio.create_task(print_numbers()) task2 = asyncio.create_task(print_letters()) await asyncio.gather(task1, task2)asyncio.run(main())在理论利用中,咱们须要依据工作的性质来抉择适合的并发策略。 ...

April 27, 2023 · 1 min · jiezi

关于python:音频处理性能测评audiofluxtorchaudiolibrosa和essentia谁最快

介绍音频信号处理在各种利用中都施展着重要的作用,如语音辨认、音乐信息检索、语音合成等。其中,Mel频谱是一种罕用的频域特色示意办法,用于形容人类听觉系统对频率的敏感水平。 在深度学习音频畛域,mel频谱是最罕用的音频特色。在本文中,咱们将对四个罕用的音频解决库——audioflux、torchaudio、librosa和essentia——进行性能测试,以评估它们在计算Mel频谱时的效率。 LibraryLanguageVersionAboutaudioFluxC/Python0.1.5A library for audio and music analysis, feature extractiontorchaudioPython0.11.0Data manipulation and transformation for audio signal processing, powered by PyTorchlibrosaPython0.10.0C++ library for audio and music analysis, description and synthesis, including Python bindingsessentiaC++/Python2.0.1Python library for audio and music analysisaudioFlux:基于C开发和python包装,底层针对不同平台有不同的桥接解决,反对OpenBLAS,MKL等TorchAudio: 基于pytorch开发,pytorch基于C++开发和python包装,底层应用MKL,pytorch针对CPU是高度优化的(本篇评测不波及到GPU版pytorch);librosa: 纯python开发,次要基于numpy和scipy,numpy底层应用OpenBLAS;Essentia: 基于C++开发和python包装,底层应用Eigen,FFTW; 针对音频畛域最常见的mel特色,波及到性能次要卡点有FFT计算,矩阵计算,多线程并行处理这三局部,其它主要卡点有算法业务实现,python包装等。 针对FFT计算,librosa应用scipy的fftpack实现FFT计算减速,比FFTW3,MKL,Accelerate要慢一些;针对矩阵计算,MKL比OpenBLAS要快些,OpenBLAS比其Eigen快一些;针对多线程并行处理,具体各个我的项目外部是否有反对。 测试脚本测试多个库,应用以下形式: $ python run_benchmark.py -p audioflux,torchaudio,librosa -r 1000 -er 10 -t 1,5,10,100,500,1000,2000,3000-p: The library name, list-r: The number of sample data, number-er: The number of run_xxx.py calls, number-t: The time of each sample data, list测试单个库,应用以下形式: ...

April 26, 2023 · 1 min · jiezi

关于python:原来Python的协程有2种实现方式

什么是协程在 Python 中,协程(Coroutine)是一种轻量级的并发编程形式,能够通过合作式多任务来实现高效的并发执行。协程是一种非凡的生成器函数,通过应用 yield 关键字来挂起函数的执行,并保留以后的执行状态。协程的执行能够通过 send 办法来复原,并在下一次挂起时返回一个值。 在 Python 3.4 之前,协程通常应用 yield 关键字来实现,称为“生成器协程”。在 Python 3.4 引入了 asyncio 模块后,能够应用 async/await 关键字来定义协程函数,称为“原生协程”。 协程相比于线程和过程,具备以下长处: 轻量级:协程的上下文切换老本很小,能够在单线程内并发执行大量的协程。低提早:协程的执行过程中,没有线程切换的开销,也没有加锁解锁的开销,能够更快地响应内部事件。高效性:协程的代码通常比多线程和多过程的代码更加简洁和可读,保护老本更低。协程的应用场景包含网络编程、异步 I/O、数据流解决、高并发工作等。生成器协程在 Python 3 中,生成器协程(Generator Coroutine)是指应用生成器函数来实现的协程。生成器函数是一种非凡的函数,其返回一个生成器对象,能够通过 yield 语句暂停函数的执行,而后在下一次调用生成器对象的 「next」() 办法时继续执行。 上面给出一个简略的生成器协程的示例,其中蕴含一个生成器函数 coroutine 和一个简略的异步 I/O 操作: import asynciodef coroutine():    print('Coroutine started')    while True:        result = yield        print('Coroutine received:', result)async def main():    print('Main started')    c = coroutine()    next(c)    c.send('Hello')    await asyncio.sleep(1)    c.send('World')    print('Main finished')asyncio.run(main())后果输入: [root@workhost k8s]# python3 test.py Main startedCoroutine startedCoroutine received: HelloCoroutine received: WorldMain finished来看一下,下面代码的执行过程: main 函数开始执行,打印出 Main started。创立一个生成器对象 c,调用 next(c) 使其执行到第一个 yield 语句处暂停。应用 c.send('Hello') 复原生成器函数的执行,并将 'Hello' 作为生成器函数的返回值。在期待1秒钟的过程中,main 函数暂停执行,期待事件循环发动下一次工作。在期待1秒钟后,应用 c.send('World') 继续执行生成器函数,并将 'World' 作为生成器函数的返回值。main 函数复原执行,打印出 Main finished。在下面的代码中,应用生成器函数 coroutine 实现了一个简略的协程。生成器函数通过应用 yield 语句暂停函数的执行,而后能够通过 send 办法复原函数的执行,并将值传递给生成器函数。通过这种形式,能够应用生成器函数实现异步并发。在下面的示例中,应用生成器函数接管并打印异步 I/O 操作的后果。 原生协程Python 3 引入了原生协程(Native Coroutine)作为一种新的协程类型。原生协程是通过应用 async/await 关键字来定义的,与生成器协程不同,它们能够像一般函数一样应用 return 语句返回值,而不是应用 yield 语句。 ...

April 26, 2023 · 1 min · jiezi

关于python:现在支持对maxcompute的odpssql节点执行结果进行检查吗比如检查select-得到的数

咱们能够通过编写Python脚本来实现对odpssql节点执行后果的查看。 具体的实现形式为,咱们能够将odpssql节点执行后果导出到本地设施中的.csv或.xlsx文件中,而后应用Python的pandas库读取这些文件,在读取的过程中进行数据的校验,包含数据类型、数值范畴、空值等等。如果数据不合乎预期,咱们能够通过Python的日志模块将错误信息输入到日志文件中,并触发告警零碎。 上面是一个简略的Python脚本示例,用于读取.csv文件并实现数据校验和告警: 残缺内容请点击下方链接查看: https://developer.aliyun.com/ask/497831 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

April 26, 2023 · 1 min · jiezi

关于python:Python-字符串

字符串是 Python 中最罕用的数据类型。咱们能够简略地通过将字符括在引号中来创立它们。Python 中单引号和双引号是雷同的。创立字符串就像为变量赋值一样简略。 Python 拜访字符串中的值Python 不反对单字符类型,单字符在 Python 中也是作为一个字符串应用。Python 拜访子字符串,能够应用方括号来截取字符串 更新字符串您能够通过(从新)将变量调配给另一个字符串来“更新”现有字符串。新值能够与其之前的值相干,也能够与齐全不同的字符串相干。 Python 字符串连贯咱们能够对字符串进行截取并与其余字符串进行连贯 Python 转义字符在须要在字符中应用特殊字符时,python 用反斜杠 \ 转义字符 转载文章,更多内容大家能够看原文章无关列表发更多常识。转载子{数字空间WRITRE-BUG}:https://www.writebug.com/article/931f4bfe-c790-11ed-a60f-6479...

April 26, 2023 · 1 min · jiezi

关于python:Python-Web-开发之-Flask-入门实践

导语:Flask 是一个轻量级的 Python Web 框架,广受开发者青睐。本文将率领大家理解 Flask 的基本概念、搭建一个简略的 Web 我的项目以及如何进一步扩大性能。 一、Flask 简介Flask 是一个基于 Werkzeug 和 Jinja2 的微型 Web 框架,它的特点是轻量、易学习、可扩大。应用 Flask,咱们能够疾速构建 Web 应用程序,进行 RESTful API 开发等。 二、环境搭建首先,咱们须要装置 Flask: pip install flask接下来,创立一个简略的 Flask 利用: # app.pyfrom flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello, World!'if __name__ == '__main__': app.run(debug=True)运行 app.py: python app.py在浏览器中拜访 http://127.0.0.1:5000/,您将看到 "Hello, World!"。 三、路由与视图函数在 Flask 中,路由与视图函数的关联是通过装璜器 app.route() 实现的。咱们能够为不同的 URL 门路定义不同的视图函数。 @app.route('/user/<username>')def show_user_profile(username): return 'User %s' % username下面的代码定义了一个带参数的路由,其中 <username> 是 URL 中的变量局部,将作为参数传递给视图函数。 ...

April 26, 2023 · 2 min · jiezi

关于python:python-的第三方虚拟环境和包管理器集合

有如下: Rye/poetry/pip/pipenv/pyenv/venv/virtualenv/pdm/hatch 参考:Flask 之父用 Rust 编写 Python 包管理工具:Rye

April 26, 2023 · 1 min · jiezi

关于python:Python-列表

序列是Python中最根本的数据结构。序列中的每个元素都调配一个数字 - 它的地位,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表和元组。 序列都能够进行的操作包含索引,切片,加,乘,查看成员。 此外,Python曾经内置确定序列的长度以及确定最大和最小的元素的办法。 列表是最罕用的Python数据类型,它能够作为一个方括号内的逗号分隔值呈现。 列表的数据项不须要具备雷同的类型.转载文章,大家能够原文章无关列表发更多常识。转载子{数字空间WRITRE-BUG}:https://www.writebug.com/article/931f4bfe-c790-11ed-a60f-6479...

April 25, 2023 · 1 min · jiezi

关于python:深入理解python虚拟机程序执行的载体栈帧

深刻了解python虚拟机:程序执行的载体——栈帧栈帧(Stack Frame)是 Python 虚拟机中程序执行的载体之一,也是 Python 中的一种执行上下文。每当 Python 执行一个函数或办法时,都会创立一个栈帧来示意以后的函数调用,并将其压入一个称为调用栈(Call Stack)的数据结构中。调用栈是一个后进先出(LIFO)的数据结构,用于管理程序中的函数调用关系。 栈帧的创立和销毁是动静的,随着函数的调用和返回而一直产生。当一个函数被调用时,一个新的栈帧会被创立并推入调用栈,当函数调用完结后,对应的栈帧会从调用栈中弹出并销毁。 栈帧的应用使得 Python 可能实现函数的嵌套调用和递归调用。通过一直地创立和销毁栈帧,Python 可能跟踪函数调用关系,保留和复原局部变量的值,实现函数的嵌套和递归执行。同时,栈帧还能够用于实现异样解决、调试信息的收集和优化技术等。 须要留神的是,栈帧是有限度的,Python 解释器会对栈帧的数量和大小进行限度,以避免栈溢出和资源耗尽的状况产生。在编写 Python 程序时,正当应用函数调用和栈帧能够帮忙进步程序的性能和可维护性。 栈帧数据结构typedef struct _frame { PyObject_VAR_HEAD struct _frame *f_back; /* previous frame, or NULL */ PyCodeObject *f_code; /* code segment */ PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ PyObject *f_globals; /* global symbol table (PyDictObject) */ PyObject *f_locals; /* local symbol table (any mapping) */ PyObject **f_valuestack; /* points after the last local */ /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. Frame evaluation usually NULLs it, but a frame that yields sets it to the current stack top. */ PyObject **f_stacktop; PyObject *f_trace; /* Trace function */ /* In a generator, we need to be able to swap between the exception state inside the generator and the exception state of the calling frame (which shouldn't be impacted when the generator "yields" from an except handler). These three fields exist exactly for that, and are unused for non-generator frames. See the save_exc_state and swap_exc_state functions in ceval.c for details of their use. */ PyObject *f_exc_type, *f_exc_value, *f_exc_traceback; /* Borrowed reference to a generator, or NULL */ PyObject *f_gen; int f_lasti; /* Last instruction if called */ /* Call PyFrame_GetLineNumber() instead of reading this field directly. As of 2.3 f_lineno is only valid when tracing is active (i.e. when f_trace is set). At other times we use PyCode_Addr2Line to calculate the line from the current bytecode index. */ int f_lineno; /* Current line number */ int f_iblock; /* index in f_blockstack */ char f_executing; /* whether the frame is still executing */ PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */} PyFrameObject;内存申请和栈帧的内存布局在 cpython 当中,当咱们须要申请一个 frame object 对象的时候,首先须要申请内存空间,然而在申请内存空间的时候并不是单单申请一个 frameobject 大小的内存,而是会申请额定的内存空间,大抵布局如下所示。 ...

April 25, 2023 · 4 min · jiezi

关于python:Python中的生成器深入理解与实践

导语:生成器是Python中一种十分实用的个性,它能帮忙咱们编写高效的代码,尤其是在解决大量数据时。本文将具体介绍生成器的原理、用法以及理论利用场景。 一、生成器简介生成器是一种非凡的迭代器,它应用yield关键字将值返回给调用者,而不是应用return。与一般函数相比,生成器有一个重要的劣势:它能够暂停函数的执行,并在须要时复原执行,从而实现了惰性求值,节俭内存。 二、生成器的原理生成器函数在调用时不会立刻执行,而是返回一个生成器对象。当咱们对生成器对象进行迭代时,生成器函数才会执行,直到遇到yield语句。此时,生成器会暂停执行并将yield后的值返回给调用者。当再次对生成器对象进行迭代时,生成器函数会从上次暂停的地位复原执行。 def my_generator(): yield 1 yield 2 yield 3g = my_generator()print(next(g)) # 输入 1print(next(g)) # 输入 2print(next(g)) # 输入 3三、生成器的实际1. 斐波那契数列def fibonacci(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + bfor num in fibonacci(10): print(num)2. 文件读取def read_large_file(file_path, block_size=1024): with open(file_path, "r") as f: while True: data = f.read(block_size) if not data: break yield datafor chunk in read_large_file("large_file.txt"): process_data(chunk)四、生成器在理论我的项目中的利用数据流解决:生成器能够解决大量数据,如日志文件、网络数据流等,防止一次性加载到内存中。并发编程:生成器能够简化协程的实现,进步程序的并发性能。数据管道:生成器能够用于构建数据处理管道,实现数据的流式解决。五、结语生成器在Python编程中具备重要作用,理解生成器的原理和实际以及在理论我的项目中的利用,有助于咱们编写更加高效、易保护的代码。把握生成器的应用,让咱们成为更优良的Python开发者。 ...

April 25, 2023 · 1 min · jiezi

关于python:python编程基础

Python 并不是一门新的编程语言,1991 年就发行了第一个版本,2010 年当前随着大数据和人工智能的衰亡,Python 又从新焕发出了夺目的光辉。在 2019 年 12 月份世界编程语言排行榜中,Python 排名第三,仅次于 Java 和C语言。 Python 是一门开源收费的脚本编程语言,它不仅简略易用,而且功能强大。 Python 是一门推崇“极简主义”的编程语言,浏览优良的 Python 程序就像浏览一段英文,非专业人士也能够应用 Python。 本章次要介绍和 Python 编程相干的基础知识,并没有真正波及 Python 语法,算是一道“开胃菜”本文转载于:http://c.bi

April 24, 2023 · 1 min · jiezi

关于python:001搭建esp32的micropython开发环境

MicroPython环境的搭建一、装置Thonny IDEThonny是一款简略易用的Python集成开发环境(IDE),反对Micropython开发。上面是在Thonny中搭建ESP32 Micropython开发环境的步骤: 能够从官网https://thonny.org/ 下载适宜本人电脑操作系统的版本,我集体是windows64,能够依据本人的电脑下载不同的版本。(因为Thonny占据内存比拟小,倡议下载在c盘里) 装置实现后关上软件。 关上后的界面 而后点击视图里的文件 二、下载安装esp32的串口驱动我的esp32的驱动是cp2102的驱动,倡议买cp2102驱动的esp32 cp2102的驱动下载地位:https://www.silabs.com/developers/usb-to-uart-bridge-vcp-driv...局部驱动时ch340的驱动CH340驱动下载地位:https://www.wch.cn/download/CH341SER_EXE.html 下载后须要装置驱动,这里有几点须要留神一下 装置驱动的时候须要将esp32设施连贯电脑,给esp32供上电ESP32开发板用的是micro USB口,买esp32的时候倡议一块买上单片机专属的线,超市买的充电线必定是不行的。肯定要晓得本人的板子是什么驱动,装置不适合的驱动是装置不上的(能够问客服)cp2102的驱动和CH340的驱动关上间接装置就行 关上电脑的设施管理器,端口呈现COM即装置胜利。 三、下载Micropython固件能够在Micropython官网(http://micropython.org/download/)下载ESP32固件。点进去后下载Firmware外面的bin文件就能够了(bin文件的下载地位要分明) 四、连贯ESP32将ESP32通过USB数据线连贯至电脑,并通过设施管理器查看该设施连贯的串口号。 五、烧录Micropython固件关上Thonny软件,点击运行,配置解释器在新的界面里,Port抉择下载后装置的串口Firmware外面抉择刚刚下载的Micropython固件(bin文件)而后装置,期待装置进度实现即可。 六、交互运行程序

April 24, 2023 · 1 min · jiezi

关于python:Python中的装饰器让你的代码更优雅

摘要: 本文将为您具体介绍Python装璜器的概念、用法和利用场景,帮忙您编写更简洁、优雅的代码。 注释: 1. 什么是装璜器? 装璜器(Decorator)是Python中一种用于批改函数或类的行为的设计模式。装璜器容许您在不批改原始函数或类的状况下,给它们增加新的性能,这使得代码更具可重用性和可扩展性。简而言之,装璜器就像一个包装,它能够为被装璜的函数或类增加一些额定的性能。 2. 如何应用装璜器? 装璜器的根本用法很简略,只需在函数或类定义前加上一个 @decorator 语法糖即可。上面咱们来看一个简略的例子: def my_decorator(func): def wrapper(): print("Do something before the function is called.") func() print("Do something after the function is called.") return wrapper@my_decoratordef say_hello(): print("Hello, world!")say_hello()运行以上代码,你将会看到如下输入: Do something before the function is called.Hello, world!Do something after the function is called.在这个例子中,咱们定义了一个名为 my_decorator 的装璜器,它承受一个函数作为参数,并返回一个新的函数 wrapper。当咱们在 say_hello 函数前加上 @my_decorator 时,它的行为被批改了:在原函数执行前后,都会执行一些额定的操作。 3. 利用场景 装璜器在理论开发中有许多利用场景,以下是一些常见的例子: 性能测试:应用装璜器记录函数的执行工夫,帮忙咱们找出性能瓶颈。import timedef timing_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} took {end_time - start_time:.2f} seconds to run.") return result return wrapper@timing_decoratordef slow_function(): time.sleep(2)slow_function()访问控制:应用装璜器实现用户身份验证、权限查看等性能。def admin_required(func): def wrapper(user, *args, **kwargs): if user.is_admin: return func(user, *args, **kwargs) else: raise PermissionError("Only admins can access this function.") return wrapper@admin_requireddef restricted_function(user): print("You have access to this restricted function.")class User: def __init__(self, is_admin): self.is_admin = is_adminadmin = User(is_admin=True)non_admin= User(is_admin=False)try: restricted_function(admin) except PermissionError as e: print(e)try: restricted_function(non_admin) except PermissionError as e: print(e)日志记录:应用装璜器自动记录函数的调用日志。import loggingdef log_decorator(func): def wrapper(*args, **kwargs): logging.basicConfig(level=logging.INFO) logging.info(f"Function '{func.__name__}' is called with arguments: {args}, {kwargs}") result = func(*args, **kwargs) logging.info(f"Function '{func.__name__}' has finished.") return result return wrapper@log_decoratordef example_function(a, b, c=3): print("This is an example function.") return a + b + cexample_function(1, 2, c=4)4. 总结 ...

April 24, 2023 · 1 min · jiezi

关于python:vscode使用venv创建多版本虚拟环境

想着学习一下开源神器vscode的应用,发现在创立不是默认Python环境的虚拟环境时不是很不便(相比Pycharm来说麻烦很多)。比方我装置了Python3.8/3.8/3.10版本,比拟新的3.10作为默认环境配置在零碎环境变量中,两外两个没有增加。在VScode terminal中输出python -m venv myvenvfolder,则默认抉择Python3.10版本创立的虚拟环境,如果我想用3.8版本,则在VScode terminal中十分不不便。 解决办法:进入3.8的装置门路,比方我的是C:\Users\wzh\AppData\Local\Programs\Python\Python38,在地址栏中输出cmd进入命令行模式,这时能够用venv命令了,输出如下命令:python -m venv yian38如下图这时候在C:\Users\wzh\AppData\Local\Programs\Python\Python38目录下就会生成yian38的文件夹,将此文件夹拷贝到你须要的我的项目中去,比方我拷贝到了D:\mypython\yian38\。 然而,当我试着在虚拟环境中装置一个包的时候,报错了!!! Fatal error in launcher: Unable to create process using '"c:\users\wzh\appdata\local\programs\python\python38\yian38\scripts\python.exe" "D:\mypython\yian38\Scripts\pip.exe" install pandas': ??????????? 解决办法一:批改命令,在所有命令后面加上 python -mpython -m pip install pandas 解决办法二:降级pip命令(报错的起因是pip版本低了)(yian38) D:\mypython\yian38\Scripts>python -m pip install --upgrade pip再间接用pip装置,就没事了。

April 23, 2023 · 1 min · jiezi

关于python:eventlet-的-spawnn-和-spawn-有什么区别

在 eventlet 中,spawn_n() 和 spawn() 都是用于创立协程的函数,然而它们有一些区别。 spawn_n() 函数是异步的,它会在以后协程的事件循环中异步地创立一个新的协程。这意味着它会立刻返回,并且不会期待新协程的执行。spawn_n() 的益处是它不会阻塞以后协程,因而能够在不影响其余协程的状况下创立新的协程。 spawn() 函数是同步的,它会立刻创立一个新的协程并期待它实现。这意味着 spawn() 函数会阻塞以后协程,直到新协程执行实现。spawn() 的益处是,它会确保在新协程执行之前,以后协程曾经暂停,并且在新协程执行实现之前,以后协程不会再次执行。 如果你只是想在事件循环中异步地创立一个新协程,那么能够应用 spawn_n() 函数。如果你想期待新协程实现并获取它的返回值,则应该应用 spawn() 函数。

April 23, 2023 · 1 min · jiezi

关于python:drf-serializer-前缀-get-是什么-如何传递参数

在 DRF(Django Rest Framework)的 Serializer 中,以 get_ 结尾的办法是 Serializer Method Field 的办法名前缀,用于自定义该字段的值。 例如,如果你有一个 Serializer,外面有一个 CharField 字段,你能够通过定义一个以 get_ 结尾的办法来自定义该字段的值。示例如下: from rest_framework import serializersclass MySerializer(serializers.Serializer): name = serializers.CharField() def get_name(self, obj): return obj['name'].strip()在下面的例子中,get_name 办法承受一个 obj 参数,用于从传递的数据中获取该字段的值,并在返回之前执行 .strip() 办法。 你能够在 get_ 办法中接管传递给 Serializer 的数据,并通过该办法自定义字段的值,例如从其余字段中计算、格式化等。 要将参数传递到 Serializer Method Field 办法中,能够通过定义 Serializer Field 时的 source 参数进行传递。例如: from rest_framework import serializersclass MySerializer(serializers.Serializer): name = serializers.CharField(source='first_name') def get_name(self, obj): return obj['first_name'].strip()在下面的例子中,name 字段的值从 first_name 字段中获取,并在 get_name 办法中进行了解决。 ...

April 23, 2023 · 1 min · jiezi

关于python:新版Python-分布式爬虫与-JS-逆向进阶实战

download:(新版)Python 分布式爬虫与 JS 逆向进阶实战React是由Facebook开发的一种JavaScript库,用于构建用户界面。它采纳组件化的设计思维,使得开发者能够拆散开发不同的功能模块,并且能够反复利用这些组件,从而进步了开发效率和代码可维护性。 首先,React的外围概念是虚构DOM(Virtual DOM)。虚构DOM是一种轻量级的JavaScript对象树,它能够示意整个UI层次结构。每当应用程序中的状态发生变化时,React会自动更新虚构DOM并比拟前后两个版本之间的差别,而后只更新须要更改的局部,从而缩小了DOM操作的次数,进步了性能。 其次,React具备单向数据流的个性。在React应用程序中,数据流动的方向是自上而下的,也就是说,父组件能够向子组件传递数据,然而子组件不能间接批改父组件的数据。这种数据流动形式使得应用程序的数据流十分清晰明了,易于调试和保护。 除此之外,React还有许多其余的长处,例如,它能够与其余框架和库进行无缝集成,并反对服务器端渲染,同时还有很大的社区反对和文档资源。此外,React还反对应用JSX语法来形容UI组件,这使得开发者能够将组件的构造和行为封装在一起,从而更加优雅和简洁地编写代码。 尽管React具备许多长处,但也存在一些问题。例如,因为它是一种库而不是框架,因而须要本人抉择和配置其余必要的工具和库来搭建残缺的开发环境。此外,因为React是基于JavaScript的,所以可能会受到JavaScript自身的限度和缺点的影响。 总的来说,React作为一种风行的JavaScript库,曾经被广泛应用于许多应用程序中,并且在将来依然具备良好的发展前景。随着技术的一直倒退和欠缺,置信React将会在用户界面开发畛域中持续施展着重要的作用,并为开发者带来更好的体验和效率。

April 23, 2023 · 1 min · jiezi

关于python:Google-Cloud-Storage-对文件名的要求

在 Google Cloud Storage 中,文件名必须满足以下条件: 文件名必须为 Unicode 字符集的 UTF-8 编码。文件名长度必须在 1 到 1024 个字符之间。文件名能够蕴含斜杠 / 以创立目录构造。文件名不能以斜杠 / 结尾。文件名不能蕴含以下字符:\0 (null),\,*,?,[,],:,;,,,.。因而,连字符 - 是被容许的文件名字符之一,能够作为文件名的结尾。

April 23, 2023 · 1 min · jiezi

关于python:memcahed-的-python-sdk-如何批量获取memcahed的key

在 memcached 的 Python SDK 中,能够应用 get_multi 办法来获取多个 key 的值。这个办法承受一个 key 列表作为参数,并返回一个字典,蕴含每个 key 对应的值。字典中还蕴含一个 cas 字段,记录每个 key 对应的 cas 值,用于 cas 操作。在这个字典中,每个 key 对应的值可能为 None,示意该 key 不存在于 memcached 中。 如果须要获取 memcached 中的所有 key,能够先应用 stats 命令获取以后所有的 key 列表,而后再应用 get_multi 办法获取每个 key 对应的值。具体代码示例如下: import memcachemc = memcache.Client(['127.0.0.1:11211'])# 获取所有 key 列表stats = mc.get_stats('items')keys = []for server, stats in stats.items(): for key_stats in stats: if 'number' in key_stats: keys.append(key_stats['key'])# 获取所有 key 对应的值values = mc.get_multi(keys)须要留神的是,如果 memcached 中存储的 key 数量十分大,这种形式可能会导致性能问题。因而,在理论利用中,应该尽量避免获取 memcached 中所有的 key。 ...

April 23, 2023 · 1 min · jiezi

关于python:Python监测监听屏幕界面内容变化并发送通知

需要有时候须要实时监控屏幕上的信息是否发生变化,例如监控某个公众号是否发送了推送,可能是你重要的一个信息起源渠道,你心愿第一工夫留意到,抢热点等~那么能够应用Python编写这么一个脚本进行监控屏幕像素变动,只有像素发生变化,根本就是内容产生了变动。 实现原理循环截图监测界面像素变动,像素发生变化就是界面发生变化。 代码当像素发生变化,就会POST一个告诉到你的告诉URL,这个时候你接管告诉的客户端就会给你发送揭示。 import timeimport numpy as npimport requestsfrom PIL import ImageGrab# 指定要监测的区域monitor_area = (0, 0, 100, 100) # (左上角x坐标, 左上角y坐标, 右下角x坐标, 右下角y坐标)# 初始截图last_screen = np.array(ImageGrab.grab(monitor_area))# 指定HTTP申请的URLurl = "改成你的POST告诉的URL,例如企业微信、Bark、钉钉、发送邮件等"while True: # 捕捉以后屏幕截图 current_screen = np.array(ImageGrab.grab(monitor_area)) # 将上次截图和以后截图进行比拟 difference = np.sum(np.abs(current_screen - last_screen)) if difference > 0: # 发送HTTP POST申请 data = {"timestamp": time.time(), "difference": difference} response = requests.post(url, data=data) print(response.text) # 更新上次截图 last_screen = current_screen # 休眠一段时间,而后持续循环 time.sleep(1)接管告诉我应用的是IOS的Bark,间接将告诉POST到APP了: ...

April 23, 2023 · 1 min · jiezi

关于python:基于-Python-开发的外星人入侵小游戏

拜访【WRITE-BUG数字空间】_[内附残缺源码和文档] 玩家通过鼠标管制飞船口头和射击,若能在敌人达到游戏界面底端之前毁灭所有敌人,则游戏胜利,否则游戏失败。 导语写了个低配版的外星人入侵小游戏来作为 19 年的第一更吧~让咱们欢快地开始吧~ 开发工具Python 版本:3.6.4 相干模块: pygame 模块;以及一些 Python 自带的模块。 环境搭建装置 Python 并增加到环境变量,pip 装置须要的相干模块即可。 先睹为快在 cmd 窗口运行"Game13.py"文件即可。 成果如下:

April 22, 2023 · 1 min · jiezi

关于python:K哥爬虫普法微信公众号爬虫构成不正当竞争爬虫er面对金山如何避免滥用爬虫

我国目前并未出台专门针对网络爬虫技术的法律标准,但在司法实际中,相干裁决已不足为奇,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对实在案例的剖析,旨在进步宽广爬虫工程师的法律意识,通晓如何非法合规利用爬虫技术,警钟长鸣,做一个违法、护法、有准则的技术人员。案情介绍2011年1月微信问世,腾讯公司通过继续投入,构建起包含微信平台、微信个人用户、开放平台、微信领取、小程序等产品性能和服务,构建起包含微信平台、微信个人用户、公众号运营者、第三方服务商等多角色主体独特参加的微信生态系统。为了保障微信生态系统的衰弱倒退,保护包含微信公众平台在内的经营秩序和用户信息安全,保障良好的用户体验,腾讯公司作为平台经营者和管理者,通过在微信公众平台官网(https://mp.weixin.qq.com)设置 robots 协定,禁止任何第三方通过爬虫技术抓取微信公众号平台信息内容及数据,制订并公示了各种微信平台规定对微信公众平台信息内容及数据资源平安进行爱护。 原告系“极致了”(www.jzl.com)产品的经营者斯氏(杭州)新媒体科技有限公司,未经腾讯公司许可利用爬虫技术非法抓取微信公众平台信息内容及数据,并对外提供公众号及其文章的搜寻、公众号导航及排行、公众号数据抓取、公众号数据分析等微信公众号数据服务。 被告认为,原告的行为系利用非法抓取的微信公众号源网页信息内容和数据,通过简略的统计和剖析后对外提供微信公众号数据服务的寄生经营行为,重构了微信公众号的数据评估体系,违反了微信公众平台产品设计逻辑和经营准则,侵害了微信平台生态系统的衰弱,侵害了被告的商业利益,具备不正当性。 法院观点被告腾讯公司和腾讯科技公司系微信公众平台的经营者和管理者,原告斯氏公司是“极致了”网站经营者。被告在微信公众平台官网设置了 robots 协定,禁止任何第三方通过爬虫技术爬取微信公众号平台信息内容及数据,制订并公示了各种微信平台规定对微信公众平台信息内容及数据资源平安进行爱护。但“极致了”网站利用爬虫技术,绕开、冲破了“微信登录限度”和“IP拜访限度”,爬取微信公众平台信息内容及数据,并通过网站对外提供公众号搜寻、导航及排行等数据服务。 法院经审理认定,“极致了”网站冲破IP拜访限度和封禁措施,毁坏了微信产品登录拜访服务运行,同时“爬虫”行为会对微信服务器造成累赘,形成对微信公众号失常运行的障碍。此外,被控行为也障碍了微信产品的失常运行机制。“极致了”提供微信公众号及文章搜寻、展现等服务,形成了对微信公众号局部数据内容服务的实质性代替,进而侵害两被告通过对外受权可获取的单干利益等商业利益,形成不正当竞争。 裁决状况依据《中华人民共和国民法典》第一百二十七条、第一千一百六十七条、《中华人民共和国反不正当竞争法》第二条、第十二条第二款第四项、第十七条、《最高人民法院对于审理不正当竞争民事案件利用法律若干问题的解释》第十七条、《中华人民共和国民事诉讼法》第六十四条第一款之规定,裁决如下: 一、原告斯氏(杭州)新媒体科技有限公司立刻进行涉案不正当竞争行为,即立刻进行非法抓取微信公众号(http://mp.weixin.qq.com)信息内容及数据、进行对外提供微信公众号及其文章搜寻、公众号排行及举荐、公众号数据抓取等涉案相干数据服务,并删除曾经存储的前述数据; 二、原告斯氏(杭州)新媒体科技有限公司于本裁决失效之日起十日内抵偿被告深圳市腾讯计算机系统有限公司、腾讯科技(深圳)有限公司经济损失及为禁止不正当竞争行为所领取的正当费用共计60万元; 三、原告斯氏(杭州)新媒体科技有限公司于本裁决失效之日起七日内,在极致了网站(www.jzl.com)间断七日登载申明为被告深圳市腾讯计算机系统有限公司、腾讯科技(深圳)有限公司打消影响(申明内容需经法院审核,逾期不履行,由法院登报公开裁决次要内容,登报费用由原告斯氏(杭州)新媒体科技有限公司累赘); 对于抵偿数额,两被告主张以原告因侵权行为的获利作为抵偿的根据,一是以每月付费会员免费为计算维度,(2020)厦鹭证内字第102658号公证书载明被控网站截止被告公证时付费用户会员为8197人,付费会员分为三个等级(高级会员为89元每月,奢华会员为149元每月,超级会员为299元每月),仅以每月89元为计算基数,则“极致了”网站每月收取的会员费用为8197人*89元每月=729533元。依据两被告提交的就“极致了”网站对付费会员提供服务状况等进行的公证,即“极致了”网站对网站会员进行免费截止2021年8月至多曾经10个月,思考付费会员可能在一直增长变动的前提下,暂以729533元的50%为基数,“极致了”网站仅仅在10个月就付费会员获利为:729533元每月*50%*10个月=3647665元。此外,综合“极致了”网站理论免费会员制度运行工夫远远早于2020年9月,故“极致了”网站理论获利状况远远不止于此。二是以单次监控/采集收集为计算维度,“极致了”网站最低一级的付费会员费用为每月89元,含300次阅读数监控和300次数据回采,即均匀每次监控/回采收益约为0.15元。(2020)厦鹭证内字第102658号公证书载明被控网站截止被告公证时“极致了”网站已回采超过6亿公众号文章,即仅数据回采局部获利为6亿*0.15元=9000000元,思考“极致了”网站还提供阅读数监控等其余服务,“极致了”网站理论获利不止于该金额。综上,被告主张原告抵偿经济损失及正当收入共计300万元。原告抗辩其经营的“极致了”网站获利较少,但未提交主观证据予以证实。 法院留神到如下事实: 1.原告在庭审中自认“极致了”网站于2020年5月上线,其中下线四个月后又从新上线直至2021年8月,原告在明知“极致了”网站涉嫌侵权的状况下依然从新上线“极致了”网站,阐明侵权主观歹意较大; 2.微信在社交产品市场中领有极高的市场占有率,享有极高的知名度,商业价值非常可观。微信公众号领有泛滥用户,具备较高的市场价值,可能给两被告带来可观的市场收益,同时微信公众号可能稳固地吸引海量用户数据,具备较大的数据衍生产品开发空间,能给两被告带来可观的增值利润; 3.被控“极致了”网站通过多个不同网址以及多个公众号进行宣传、服务,每日爬取的公众号及文章数量较大; 4.联合“极致了”网站不同产品、不同服务的报价等情节予以酌情考量其销售利润; 5.被控行为尽管造成了微信用户对微信公众号数据局部流量的散失,两者之间只是具备或然性关联关系; 6.“极致了”网站提供微信公众号文章搜寻服务中,点击文章题目查看微信公众号文章内容仍需跳转回微信公众号进行展现; 7.两被告为本案诉讼采取了屡次公证证据顾全措施,并委托律师参加诉讼,须要领取正当维权费用。 综合考量上述因素,法院酌定原告连带抵偿两被告经济损失及为禁止不正当竞争行为所领取的正当费用共计60万元。 裁决文书杭州铁路运输法院(2021)浙8601民初309号民事判决书 案例剖析本案的重点有两处,一是“极致了”网站使得网络用户无需登录微信账号、订阅微信公众号即可在“极致了”网站查看除了微信公众号文章以外的相干阅读数、点赞数等相干数据内容,影响微信用户协定的履行,毁坏微信公众号数据的展现规定,对微信公众号点赞数、阅读数、公众号主体信息等局部数据内容形成实质性代替,分流了微信产品的局部潜在用户;二是微信客户端不仅向网络用户提供能够间接拜访微信公众号及文章的搜寻链接,还能够向搜狗搜寻提供引擎独家受权、容许搜狗提供公众号及文章搜寻。“极致了”官网提供微信公众号及文章搜寻、展现等服务,曾经形成对微信公众号局部数据内容服务的实质性代替,进而侵害两被告通过对外受权可获取的单干利益等商业利益,形成不正当竞争。 目前市面上有不少相似于本案的产品,通过抓取各种内容平台数据,进行数据整顿、加工解决后推出相干产品,短暂做上来的必然是和官网有单干的,单单依附爬虫进行数据采集的话,只有被平台方发现,告上法庭,必然会形成不正当竞争的,搞不好还有毁坏计算机系统罪,宽广爬虫工程师们如果公司正在研发此类产品,肯定要确认是否与官网有单干,多多关注业务的非法合规性,防止走上违法犯罪的路线。

April 21, 2023 · 1 min · jiezi

关于python:0基础学爬虫爬虫基础之自动化工具-Selenium-的使用

大数据时代,各行各业对数据采集的需要日益增多,网络爬虫的使用也更为宽泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前曾经推出不少爬虫进阶、逆向相干文章,为实现从易到难全方位笼罩,特设【0根底学爬虫】专栏,帮忙小白疾速入门爬虫,本期为自动化工具 Selenium 的应用。概述目前,很多网站都采纳 Ajax 等技术进行动静加载数据,想要采集这类网站的数据,须要通过抓包对网站的数据接口进行剖析,去寻找想要采集的数据由哪个接口传输。而且,就算找到了数据接口,这些接口可能也是被加密过的,想要通过接口获取数据,须要对加密参数进行逆向剖析,这个过程对于初学者来说非常复杂。 为了解决这些问题,可能更加简略的进行爬取数据,咱们能够应用到一些自动化工具,如 Selenium、playwright、pyppeteer 等,这些工具能够模仿浏览器运行,间接获取到数据加载实现后的网页源码,这样咱们就能够省去简单的抓包、逆向流程,间接拿到数据。 Selenium 的应用介绍Selenium 是一个风行的自动化测试框架,可用于测试 Web 应用程序的用户界面。它反对多种编程语言,如Java、Python、Ruby等,并提供了一系列 API,能够间接操作浏览器进行测试。 装置应用 selenium 首先须要下载浏览器驱动文件,这里以谷歌浏览器为例。在驱动下载页面找到与本人浏览器版本最为靠近的文件,如我的谷歌浏览器版本为 112.0.5615.86,最靠近的文件为 112.0.5615.49,抉择此文件,下载对应零碎版本的压缩包,将压缩包中的chromedriver.exe程序放到python目录中。因为失常状况下Python在装置时就会被增加到零碎环境变量之中,将chromedriver.exe放到Python目录下它就能够在任意地位被执行。 增加好驱动文件后须要装置 Python 的第三方库 selenium。 pip install selenium 应用Selenium 反对多种浏览器,如谷歌、火狐、Edge、Safari等,这里咱们以谷歌浏览器为例。 from selenium import webdriver# 初始化浏览器对象driver = webdriver.Chrome()# 驱动浏览器关上指标网址driver.get('https://www.baidu.com/')# 打印以后页面的源代码print(driver.page_source)# 敞开浏览器driver.quit()运行代码后咱们会发现主动关上了一个浏览器,拜访了指标网址,在控制台输入了页面的源代码,而后主动敞开。 Selenium 提供了一系列实用的 Api,通过它咱们能够实现更多操作。 元素查找在之前的文章《解析库的应用》中,咱们曾经讲到了 Xpath、bs4 这两个库的应用办法,讲到了 Xpath 的门路表达式和 CSS 选择器,因而这里次要解说定位办法,门路表达式与 CSS 选择器的应用能够去前文中理解。 以京东首页为例,想要获取秒杀栏目的商品信息,咱们能够通过多种办法来进行定位。 from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get('https://www.jd.com/')# 依据 Xpath 定位goods_xpath = driver.find_elements(By.XPATH, '//div[@class="slider_list"]/div/a[@class="slider_item seckill-item slider_active"]')# 依据 Css 选择器定位goods_css = driver.find_elements(By.CSS_SELECTOR, 'a[class="slider_item seckill-item slider_active"]')# 依据类名定位goods_class_name = driver.find_elements(By.CLASS_NAME,'seckill-item')print(goods_xpath)for goods in goods_xpath: # 输入节点的文本信息 print(goods.text) driver.quit()# [<selenium.webdriver.remote.webelement.WebElement(session="f49c1906753e404ca0a017...]# 欧臻廷保湿修护亮颜银霜面霜70ml护肤品化妆品乳液滋润送女友礼物礼盒款# ¥1380.00# Redmi K50Pro 天玑9000 AMOLED 2K柔性直屏 OIS光学防抖 120W快充 幻镜 8GB+256GB 5G智能手机 小米红米# ¥2619.00# 卡诗(KERASTASE)黑钻钥源鱼子酱洗发水250ml 改善毛躁呵护受损# ¥219.00除了示例代码中的,还有其它定位办法: ...

April 20, 2023 · 2 min · jiezi

关于python:一文了解量化交易

本文首发自「慕课网」,想理解更多IT干货内容,程序员圈内热闻,欢送关注"慕课网"! 原作者:袁霄|慕课网讲师 可能生存下来的物种,并不是那些最强健的,也不是那些最聪慧的,而是那些对变动作出快速反应的。——达尔文近来“量化交易”这个词听得越来越频繁,少数人对量化交易的第一印象是“高大上的技术”、“能够躺着赚钱的工具”……可是,你是否真正思考过量化交易到底是什么,能帮忙咱们做些什么?笔者认为在开启量化交易系统的开发前,有必要先了解“量化交易”的理念,分明“量化交易”能带给咱们的是否是本人想要的。本文就从实质、倒退、劣势、过程等多个维度来分析量化交易。 1. 量化交易能做什么什么是量化交易?确切地说,量化交易属于人工智能的一个利用分支,它利用计算机的弱小运算能力,用数学模型来模拟人的思维作出决策,通过数据建模、统计学剖析、程序设计等工具,从股票、债券、期货的历史数据分析中失去大概率下获利的交易策略。这么说有些官网,读起来也有些绕口,其实简略地说就是如何治理输赢的概率,帮忙咱们作出精确的决策,就像玩德州扑克那样,当你持有的牌胜算大时便跟进,否则盖牌,没胜算时抉择不玩。玩牌时胜算的概率在咱们的大脑中时刻不停地计算着,而在量化交易中利用的是计算机、数学建模、程序设计这些更高级的伎俩,目标是高效疾速地取得胜算的概率,并据此作出决策。 2. 量化交易是怎么倒退起来的对于量化交易的倒退,咱们首先理解下国外的量化金融倒退状况。其实在金融畛域咱们的指标始终是金融霸主美国,咱们晓得量化金融在美国的金融畛域倒退曾经日趋成熟。这里咱们不得不提到驰名的交易巨匠理查德·丹尼斯和“量化交易之父”詹姆斯·西蒙斯这两位大佬。 理查德·丹尼斯是驰名的“海龟交易试验”的发起者,也是《海龟交易法令》的创始人。为了弄清平凡的交易员是天生造就的还是先天造就的,他在1983 年招募了 13 集体,传授给他们期货交易的基本概念,以及他本人的交易办法和准则,学员们被称为“海龟”。在随后的 4 年中,海龟们获得了年均复利 80% 的收益,这就是驰名的“海龟交易试验”。同学们可能会有疑难,为什么取这个名字?据说,丹尼斯有一次在新加坡时正目不转睛地察看着一个海龟农场,忽然冲口说出了“咱们要造就交易者,就像新加坡人养海龟一样”这句话,“海龟交易试验”正是取名于此。毋庸置疑,“海龟交易试验”是金融史上的驰名试验,在试验中使用的《海龟交易法令》提供了一套残缺的交易系统框架和精华,非常适合利用于量化剖析,以至于在最近几年的量化投资热浪中再一次成为热门模式。 詹姆斯·西蒙斯是量化交易的先行者,也是将量化交易带到这个时代的人。西蒙斯在 1988 年成立了文艺复兴科技公司,作为有史以来最胜利的对冲基金,文艺复兴科技公司的旗舰基金——大奖章基金获得年均匀 35% 左右的回报,收益远超巴菲特、索罗斯这些行业位置和他相近,然而正在应用传统交易的同行大佬们。这个数字有多牛,咱们能够比照下,它比索罗斯同期的年均回报率要高出 10 个百分点,比同期规范普尔 500 指数的年均回报率要高出 20 多个百分点,巴菲特的同期程度曾经高达 20%。 自 1988 年至今,量化交易在美国曾经有 30 年的历史了,到目前来看程序化交易曾经占到美国股票市场交易量的 85% 以上,可想而知量化交易在美国股票市场的倒退到什么水平了。 咱们都晓得美国的金融市场成熟水平是远超中国的,美国的股市有近一百多年的历史,而中国股市成立至今还不到 30 年。回到国内来看,随着国家层面推动人工智能、大数据技术的倒退,大量的量化基金产品和平台如雨后春笋个别衰亡,量化交易在国内也掀起热潮。就像互联网技术扭转着传统行业的模式一样,将来量化交易必然是国内金融市场的一个大的发展趋势。 3. 量化交易有什么益处与传统的交易相比量化交易有哪些劣势呢?传统的交易无论是技术面剖析还是基本面剖析都属于定性分析,定性分析艰深的说就是人的思维去做决策,这种高度形象的模式在深度上会有相对的劣势。而量化交易是一种定量的剖析,所谓定量分析就是方才讲到的取得一个具体的获利概率,并根据概率抉择交易的策略,因为利用了计算机的弱小运算能力,所以在广度上占有相对的劣势。 咱们能够把量化交易和传统的交易类比为中医和西医,传统的投资交易靠的是主观教训判断,无奈给出具体的参数指标,量化交易像中医那样,靠的是仪器、设施、软件,把景象转换成参考数据为病人医治提供根据。笔者的观点是把量化交易和传统的交易相结合,把人的思维模型形象成为数学模型,作为交易策略使用到量化交易中,这样是最现实的状况,既不失剖析深度,也能保障剖析的广度,不能说是鱼和熊掌兼得,算是两者特点的互补吧。 量化交易另一个劣势是能够给予咱们足够的自信,帮忙咱们克服来自兽性中的贪心、恐怖、自负等弱点。举几个典型的交易者身上产生的例子来阐明下。 比方一个交易者对市场剖析后,决定第二天买入一支股票,但在收盘后却因为一个敌人通知他小道消息而长期扭转了决策,没有买入。 又比方一个交易者用一种策略执行了 5 次交易都以亏损告终,那么他在第 6 次交易信号到来时很可能会放弃这个策略。但量化交易能够确保交易策略的严格执行,因为交易者能够确信量化交易策略通过了回测和度量剖析,是具备概率上的劣势的,从而心态上并不会呈现恐怖和犹豫的状况。 再比如说,很多人喜爱时刻盯盘,空想在 K 线的最低点买入、最高点卖出,其实盘中的稳定是随机的。通过量化交易系统能够当时编写策略,交易者实际上并不需要过多关注盘中的价格稳定,免得影响心态变动。 4. 由表及里说说量化交易的实质量化交易的实质能够用西蒙斯的这段话概括: “不论如许简单的模型,没有一个能长期不变地始终赚钱,因为市场在变动,信息在变动,咱们不是机器的奴隶,只有通过一直学习,继续一直地更新本人的模型和策略,寻找市场上的法则,让咱们的交易系统跟上变动自身,能力在交易市场中立于不败之地。”既然市场在变动,信息在变动,那么过来并不代表将来,用历史数据作测验是否有意义?另外,为什么交易策略在理论交易中的体现远不如历史模仿的后果? 对于第一个问题的答复能够举个高考相干的例子。高考前学校都会定期组织模拟考来评估学生的能力,尽管最终的高考题跟模拟考不一样,但学生在模拟考中施展的程度根本和在高考中施展的程度相差不会太大。因而用历史数据作测验是把过来的教训作为一种参考指南,通过对过来的解读发掘出蕴藏盈利机会的重复性模式。 对于第二个问题,历史测试后果和理论后果的差别次要是由这几个因素引起的: 交易者效应:其余交易者留神到了这个策略办法并开始模拟它,导致这种办法成果降落随机效应:历史测试的后果可能是一种随机性的景象最优化矛盾:抉择特定的参数升高了预先测试的价值适度拟合:与历史数据的吻合度太高,市场行为轻微的变动造成成果的好转总体来说“随时调整,正当应变”十分重要,然而除此之外咱们还须要谨记以下四点,以在交易市场中立于不败之地。 把握劣势:找到一个期望值为正的交易策略,从长期看,它能发明正的回报治理危险:管制危险、守住阵地,否则你可能等不到发明成绩的那一天坚韧不拔:唯有坚韧不拔地执行你的策略,你能力真正取得零碎的功效简单明了:从短暂看,简略的零碎比简单的零碎更有生命力5. 量化交易的过程对于量化交易的过程,如下图所示: 首先是把历史行情、基本面信息、新闻资讯等数据进行初步荡涤和解决,而后输出到量化模型中,量化模型包含了上文讲到的通过数学建模、程序设计等工具所造成的交易策略,通过剖析这些数据最终产生出交易的信号,比方买什么股、什么时候买、买多少、什么时候卖这些信息。当然实际上这个过程并没有流程图显示的那么简略,这里只是让大家有个整体的概念。 6. 写在结尾咱们不惜篇幅地从量化交易实质、倒退、劣势、过程等各个维度分析了量化交易概念,目标是想让大家可能正确理解量化交易。但不能过于神话它,也不能因为不理解而排挤它,就像工业革命以机器取代人力那样,量化交易实质上是一种帮忙咱们高效疾速地治理交易胜算的工具,是人工智能的一个利用分支。它并没有那么高深莫测,最要害的依然是交易人的思维,也就是量化交易系统的策略模型,对于可能放弃长期赚钱的主观交易大神,量化交易能够帮忙他赚更多的钱,而一个主观交易不能赚钱的人,应用量化交易也并不能有所起色。因而咱们在把握工具的同时,也别忘记修炼本人的交易思维。 欢送关注「慕课网」帐号,咱们会始终保持内容原创,提供IT圈优质内容,分享干货常识,大家一起独特成长吧! 本文原创公布于慕课网 ,转载请注明出处,谢谢合作

April 19, 2023 · 1 min · jiezi

关于python:Python第3章-流程控制一

【本章导读】进行程序设计时,简单问题的求解通常须要通过流程进行管制。程序的流程管制可演绎为三种:程序构造、分支(抉择)构造和循环构造。每一个结构化的程序都能够由这三种构造组合或嵌套而成。这种程序设计办法,使程序具备良好的可读性和可维护性。本章在解说罕用运算的根底上,利用一系列数学问题的求解案例,具体介绍了Python中利用for关键字对range()函数产生的整数序列进行确定次数循环的办法和具体利用,介绍了利用while关键字实现循环次数不确定问题的求解办法。介绍了用if…elif…else语句实现分支构造程序设计。简略介绍了利用pass、continue和break语句实现流程跳转的办法。简略介绍了异样解决的概念和利用异样解决进步程序健壮性和容错性的程序设计办法。 【本章要点】●罕用运算及运算优先级 数值运算: +、-、*、/、//、%、**真值测试:None,False, 0, 0.0, 0j, Decimal(0), Fraction(0, 1),'', (), [], {}, set(), range(0)布尔运算:x or y, x and y, not x比拟运算:>、 >=、 <、 <=、 ==、 !=、 is、 is not 成员运算:x in s 、x not in s●for…in range()循环构造 for 循环变量 in 可遍历对象: 反复执行的语句块 [else]: 循环失常完结后需执行的语句for i in range(5): # 遍历range print(i)else: print('循环失常完结') for c in string: # 遍历字符串 print(c) for item in list: # 遍历列表、元组、字典、汇合等 print(item) for line in file: # 遍历文件对象 print(line)●while循环构造的流程管制 ...

April 19, 2023 · 1 min · jiezi

关于python:Python迭代器生成器分享贴近实际运维开发场景的小案例

迭代器&生成器在 Python 中,迭代器和生成器都是用来遍历数据汇合的工具,能够按需一一生成或返回数据,从而防止一次性加载整个数据汇合所带来的性能问题和内存耗费问题。 具体来说,迭代器是一个蕴含 iter() 和 next() 办法的对象,它通过 next() 办法顺次返回数据汇合中的每个元素,直到没有元素时引发 StopIteration 异样。迭代器能够自定义,也能够应用 Python 内置的可迭代对象,如列表、元组、字典、汇合等,以及内置的迭代器函数,如 zip()、map()、filter() 等。 而生成器是一种非凡的迭代器,它应用 yield 关键字来定义,能够在须要时生成数据,从而实现按需生成、惰性计算的成果。生成器能够大大简化代码,进步性能和可读性,也能够通过生成器表达式疾速创立简略的生成器。 上面分享几个贴近理论运维开发工作中的场景案例。实战案例假如须要从一个十分大的数据汇合中查找满足特定条件的元素,并且只须要找到第一个符合条件的元素即可进行查找。如果间接遍历整个数据汇合,可能会导致性能问题。这时能够应用迭代器和生成器来解决这个问题。def find_first_match(data, condition):    for item in data:        if condition(item):            return item    raise ValueError('No matching item found')large_data = [i for i in range(10000000)]  # 结构一个大数据汇合match = find_first_match(large_data, lambda x: x > 1000)  # 查找第一个大于 1000 的元素print(match)假如要实现一个函数,它承受一个字符串列表,而后返回这些字符串中所有字符的呈现次数。能够应用迭代器和生成器来防止遍历整个列表,并缩小内存使用量。def char_count(words):    counts = {}    for word in words:        for char in word:            counts[char] = counts.get(char, 0) + 1    return countsdef char_count_lazy(words):    def char_gen(words):        for word in words:            for char in word:                yield char    counts = {}    for char in char_gen(words):        counts[char] = counts.get(char, 0) + 1    return counts须要遍历一个多级嵌套的 JSON 对象,查找其中某个特定的值。假如 JSON 对象很大,因而不能一次性加载到内存中。这时能够应用生成器来逐级遍历 JSON 对象。def find_value(json_obj, target_key):    if isinstance(json_obj, dict):        for key, value in json_obj.items():            if key == target_key:                yield value            else:                yield from find_value(value, target_key)    elif isinstance(json_obj, list):        for item in json_obj:            yield from find_value(item, target_key)json_data = {    "name": "tantianran",    "age": 30,    "cars": [        {"model": "BMW", "year": 2000},        {"model": "Tesla", "year": 2020}    ],    "location": {        "address": "123 Main St",        "city": "New York",        "state": "NY"    }}for value in find_value(json_data, "year"):    print(value)如果须要读取一个十分大的文件,并对其中的每一行进行解决,然而因为文件太大,无奈一次性将整个文件读入内存中。这时能够应用生成器来实现逐行读取文件并逐行解决的操作。def process_lines(file_name):    with open(file_name) as f:        for line in f:            # 对每一行进行解决,这里只是简略地打印进去            print(line.strip())large_file = 'data.txt'process_lines(large_file)假如有一个大型日志文件,其中蕴含了数千万行日志记录。须要对这个日志文件进行剖析,找出所有蕴含特定关键字的日志记录,并进行统计。如果间接读取整个日志文件到内存中,可能会导致内存不足的问题。这时能够应用迭代器和生成器来解决这个问题。def log_file_reader(log_file_path):    with open(log_file_path) as f:        for line in f:            yield line.strip()def log_analyzer(log_file_path, keyword):    log_reader = log_file_reader(log_file_path)    count = 0    for line in log_reader:        if keyword in line:            count += 1    return countlog_file_path = 'logs.txt'keyword = 'error'error_count = log_analyzer(log_file_path, keyword)print(f'The number of error logs is: {error_count}')本文转载于WX公众号:不背锅运维(喜爱的盆友关注咱们):https://mp.weixin.qq.com/s/g9A4rMKscHt8gKJq34sKQw

April 19, 2023 · 1 min · jiezi

关于python:MMSegmentation自定义数据集

前言该文章次要是简述一下本人为了实现极市平台赛事过程中,应用 MMSegmentation 语义宰割开源库的心得。 在学习一个新的工具之前,肯定须要明确本人是用工具实现什么指标,而不是为了学工具而学,一旦有了目标会给你所作的事件带来意义,然而也要防止急于求成(人总是喜爱简略间接的事件,然而只有真正拉扯过肌肉才会成长),所以保持不上来的时候,只有明确这是你的大脑退缩了,但你依然想学。\( \quad \) 文章构造本文章将从一下几个方面介绍如何上手 MMsegmentation,并用 MMDeploy 实现简略的部署: 装置 MMSegmentationMMSegmentation 的文件构造MMSegmentation 的配置文件(外围)如何在 MMSegmentation 中自定义数据集训练和测试我强烈建议配合官网文档一起学习:https://mmsegmentation.readthedocs.io/zh_CN/latest/index.htmlPS:如此良心的开源库还带中文文档!\( \quad \) 注释装置 MMSegmentation环境筹备(可选,但举荐)个别咱们为了环境隔离用 Miniconda(Anaconda) 创立一个新的 python 环境,但在某些状况下也能够不必,取决于你的习惯。 从官方网站下载并装置 Miniconda & 创立一个 conda 环境,并激活: conda create --name openmmlab python=3.8 -yconda activate openmmlab\( \quad \) 装置库依据官网装置 pytorch,当初更新到2.0了,然而举荐装置之前的版本(能够点击页面中上面红框的链接,授之以渔),也能够间接点击 install previous versions of PyTorch(授之以鱼) gpu 版本(要对应本人的 cuda 版本,pip和conda 二选一) # pip 装置# CUDA 11.1 pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html# 或者# conda 装置# CUDA 11.3conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge cpu 版本(看MMSegmentation的官网文档吧) ...

April 18, 2023 · 8 min · jiezi

关于python:基于-Python-的毕业设计系统

拜访【WRITE-BUG数字空间】_[内附残缺源码和文档] 本零碎通过理论需要剖析,基于 B/S 架构,采纳 Django 框架、MySQL 数据库、FastDFS 分布式文件存储系统、Bootstrap 前端框架,设计并实现了包含题目管理子系统、选题管理子系统、开题管理子系统、问难管理子系统、问题管理子系统、用户权限管理子系统和注册、登录、反馈等各模块,其设计均依照简略灵便,平安稳固的准则来实现。 代码评估答疑 摘要:毕业设计流程繁琐,指导老师与学生之间沟通不够灵便,各种毕业设计文档管理混乱。本毕业设计零碎采纳了古代的技术形式,晋升了品质效率,升高了沟通老本和工夫老本。 本零碎通过理论需要剖析,基于 B/S 架构,采纳 Django 框架、MySQL 数据库、FastDFS 分布式文件存储系统、Bootstrap 前端框架,设计并实现了包含题目管理子系统、选题管理子系统、开题管理子系统、问难管理子系统、问题管理子系统、用户权限管理子系统和注册、登录、反馈等各模块,其设计均依照简略灵便,平安稳固的准则来实现。 关键词:内容管理系统;B/S 模式;Django 框架;MySQL 数据库;FastDFS 分布式系统 Graduation design system based on PythonZhou Ya-pei(Grade 2016, software engineering, School of Computer Science and Engineering, Chongqing Three Gorges University, Wanzhou, Chongqing 404000 ) Abstract: Considering the intricate feature of graduation design process, inflexible communication between tutor and student, and discombobulated management of various design files, this graduation design system adopts the counting way of our time. Thus, quality is ameliorated, communication cost reduced, and time line prioritized. ...

April 18, 2023 · 1 min · jiezi

关于python:扒一扒Python如何成为世界排名第一编程语言的故事

本文首发自「慕课网」,想理解更多IT干货内容,程序员圈内热闻,欢送关注"慕课网"! 作者:大周|慕课网讲师 一、前言本文将联合个人经历为各位同学主观的剖析是否有学习Python的必要、Python适宜谁学、为什么要学,心愿可能给看到此文章的同学一点倡议,建立学习指标,让学习有后果。 读完后,置信你肯定可能有所播种。 二、简述个人经历自己2010年入行,入行已十余载,历任测试岗、前后端开发岗、大数据、AI等岗位,能够说对互联网技术各岗位都有较深的了解,对各类语言也有较深的应用经验和领会。 三、没有最好的语言TIOBE每年都会为编程语言进行排行,而近两年为何Python可能蝉联榜首? 是不是当初Python就是世界上最好的语言了呢? 而我的答案是:当然不是,世界上没有最好的编程语言。而只有在某一场景下最适宜的编程语言,所以编程语言才会百花齐放。 所以对于咱们来说,也没有必要执着于到底哪门编程语言是最好的,哪门编程语言可能通吃所有场景。即使是可能通吃所有场景,但在某些场景下也并不是最好的解决方案,早晚可能出问题。 四、Python的倒退正如大多数的咱们Python语言面世于90年代初,并不是一门新语言,而Python在面世之初的十几年里体现平平无奇,而近些年飞速发展? 我认为在最后的十几年里Python并没有找到本人最好的定位,到底解决哪些场景的问题。比方: Java语言的定位就是大型网站的高并发问题,比方淘宝、京东等大型电商网站全副用的都是Java。C/C++,主打的就是平安高效,所以国内的大型金融类网站,如银行零碎、证券交易零碎等用的都是C/C++。而Python并不知道应该在哪个方向能冲破本人,当年的中小型网站的疾速建站有PHP,客户端开发有C#。 这如同有点像职业倒退迷茫的咱们,有时陷于迷茫不知往哪个方向后退。 五、Python倒退的契机5.1 质量体系搭建我最后接触Python大略是在10年前,也就是2013年前后,过后还是Python2的版本,我的项目里须要带一群没有编程教训的小伙伴疾速构建一套品质管理体系平台,采纳什么语言就十分重要了,如果让他们学习Java,那大大的拖慢了我的项目的进度,于是Python就进入了我的眼帘。 但过后Python在国内也并不是一个很公众的语言,在世界编程语言排行榜中大略第六的样子,国内用的并不是很多。 但有了这次的应用经验后,Python给我的第一印象就是上手容易,当之无愧的第一易学的编程语言。 5.2 离线大数据的数据处理随着各项技术的冲破,大数据开始失去了疾速倒退,而Python易上手的特点失去了最好的施展,同时开发效率要远远高于其它编程语言,同样的工夫、同样的工作,应用Python能够更疾速的实现我的项目。 Python在数据处理方面失去了很好的利用,毕竟Python的语言表达比纯SQL的逻辑更让人容易明确,也并不会给数据库带来更大的压力。 过后我所带的我的项目中: C端网站类的我的项目采纳Java语言测试平台、自动化测试等品质管制方向采纳了Python实时大数据计算利用的是Java语言离线数据平台的数据逻辑加工及运算全副采纳的是Python,当然明天也有很多人间接用的SQL,毕竟习惯是不同的,集体爱好也不雷同,这一点不做强求。5.3 数据分析最早的数据分析师采纳的剖析工具都是Excel,但Excel很难对大规模数据进行解决,大数据时代下大规模数据的解决已成为常态,而此时我推动了公司外部数据分析团队全副采纳Python语言进行分析模型的落地。 这一方面也失去了很好的利用,数据处理效率和数据规模都失去了很大的晋升。 而事实也证实,我的决策是正确的,Python语言在品质控制系统、数据分析及剖析平台构建、数据加工解决等方面均体现良好。 5.4 网站开发因为通过了这样倒退历程的语言遍及,Python走入到了更多人的眼帘,Python开始反扑web开发市场,直到明天Python占有了很多中小型网站疾速建站的市场,在这个方面吞噬了很多原PHP语言的场景。当然也有很多人可能举例说明世界范畴内哪些大型网站是应用Python来进行开发的,我并不否定Python也有这方面的能力,但市场上的确在高并发场景中Java利用的是最多的,我并不想误导大家。 还是那句话,咱们须要把最失当的工具用在最适宜它的场景。 5.5 人工智能人工智能是一个不得不提的场景,我2014年开始落地AI方向我的项目,也带过算法团队,过后做的是常识图谱方向的我的项目,过后的一些算法工程师利用的是MATLAB来进行算法模型的落地,不能说效率不高,毕竟过后都用这个,但随着人工智能的市场规模扩充,很多算法工程师都开始利用Python来进行算法开发和利用,毕竟它易上手、效率高、领有丰盛的扩大库,看到这篇文章的同学应该做这方面的不多,所以我也不做太深刻的阐明了,简略提一下。 六、将来的倒退国家政策:在过来的十四五布局以及二十大会议中都提到了建设数字中国。 在各大企业的数字化转型中,技术选型又是一个避不开的话题。如何可能疾速达成成为数字化企业的指标,那造就数字化人才又成了一个不得不议论的话题,这里我就不开展细说了,大家如果对数字化感兴趣,那么能够到百度上搜寻"周景阳 数字化",能够搜寻到相干的一些信息,我在一些数字化峰会上做过一些数字化人才培养的演讲和分享,如果你再感兴趣,那么能够找到我,咱们再进行认真的探讨。 简略来说就是企业要造成数据资产,员工要学会应用数据来给企业发明价值。 那么下面咱们说过,Python在数据处理、数据了解、数据展现等方面都有优异的体现。 那么将来如果想成为数字化人才,Python就是你不得不把握的一门具备外围竞争力的语言。 七、适宜谁学如果你领有以下场景的问题须要解决,我倡议你还是把握Python会大大的进步你的工作效率以及职场的外围竞争力 疾速进行网站开发,如中型及小型网站的疾速建站,Python的速度会远远高于Java,市面上绝大部分网站其实都属于中小型网站品质平台开发,如自动化测试平台、性能测试平台等运维平台开发,如果你是运维工程师或DBA,Python将会更好的代替shell,可能更能进步你的工作效率,并且可能让你的工作更容易拿到成绩,因为我带过的运维及DBA都因为本人可能独立搭建一套自动化运维平台而薪资失去了大幅的晋升。数据分析,如果你是数据分析师,要解决数据分析的场景,Python将会成为你的外围竞争力ETL,不要仅仅会写SQL了,这个技能所有的ETL都会,学会Python不仅进步你的工作效率,而且可能让你具备数据加工平台搭建的能力自动化办公,如果你恰好是财务、人力、法律、金融等相干岗位,肯定肯定要学习一下Python,这是你成为数字化人才的必备路线,我有很多敌人在金融体系里工作,局部国央企曾经发文提倡全员把握Python了,如中信银行去年就发了文件讲述了Python对于所有岗位的重要性,要求把握。我置信在不久之后,会有更多的企业提出这样的要求,如果你能后人一步,那会极大进步你的职场竞争力。算法工程师,算法并不仅仅须要把握那些科学计算库,你须要更好的与工程的同学进行配合,将来也须要进行算法平台开发,这样你能力显得与他人不同,能力拉开与他人的差距。可能Python还会适宜一些其余的场景,这由同学们持续开掘,以上纯正是我集体的经验,我利用过的方向,给同学们一些倡议。 最初,正是因为Python找到了本人的精准定位,能力一跃成为世界编程语言排行榜榜首的地位,精准的解决局部场景的问题。而你,也能够利用Python成为你职业倒退的助力,让你的职业规划更上一层楼。 欢送关注「慕课网」帐号,咱们会始终保持内容原创,提供IT圈优质内容,分享干货常识,大家一起独特成长吧! 本文原创公布于慕课网 ,转载请注明出处,谢谢合作

April 17, 2023 · 1 min · jiezi

关于python:归一化是什么意思numpy-如何实现归一化

归一化是指将数据缩放到特定的范畴内,通常是将数据映射到 [0,1] 或 [-1,1] 区间内。这种缩放的目标是对立数据的尺度,使得不同特色之间能够进行比拟和解决。 在 numpy 中,归一化能够通过以下形式实现: 将数据缩放到 [0,1] 区间内 # x为要归一化的数据x_normalized = (x - x.min()) / (x.max() - x.min())将数据缩放到 [-1,1] 区间内 # x为要归一化的数据x_normalized = 2 * (x - x.min()) / (x.max() - x.min()) - 1除了上述办法外,numpy 还提供了一些专门用于归一化的函数,例如 numpy.linalg.norm() 用于计算向量的范数,能够用来对向量进行归一化。另外,numpy.interp() 函数能够将数组插值到指定的范畴内,能够用来对数据进行归一化。

April 17, 2023 · 1 min · jiezi

关于python:python-的-PIL-的-resize-的默认插值是什么

chatGPT 通知我,PIL 的 resize 的默认插值是 BILINEAR 事实真是如此吗? 看一下 PIL 的源码: PIL/Image.py def resize(self, size, resample=None, box=None, reducing_gap=None): """ Returns a resized copy of this image. :param size: The requested size in pixels, as a 2-tuple: (width, height). :param resample: An optional resampling filter. This can be one of :py:data:`Resampling.NEAREST`, :py:data:`Resampling.BOX`, :py:data:`Resampling.BILINEAR`, :py:data:`Resampling.HAMMING`, :py:data:`Resampling.BICUBIC` or :py:data:`Resampling.LANCZOS`. If the image has mode "1" or "P", it is always set to :py:data:`Resampling.NEAREST`. If the image mode specifies a number of bits, such as "I;16", then the default filter is :py:data:`Resampling.NEAREST`. Otherwise, the default filter is :py:data:`Resampling.BICUBIC`. See: :ref:`concept-filters`. :param box: An optional 4-tuple of floats providing the source image region to be scaled. The values must be within (0, 0, width, height) rectangle. If omitted or None, the entire source is used. :param reducing_gap: Apply optimization by resizing the image in two steps. First, reducing the image by integer times using :py:meth:`~PIL.Image.Image.reduce`. Second, resizing using regular resampling. The last step changes size no less than by ``reducing_gap`` times. ``reducing_gap`` may be None (no first step is performed) or should be greater than 1.0. The bigger ``reducing_gap``, the closer the result to the fair resampling. The smaller ``reducing_gap``, the faster resizing. With ``reducing_gap`` greater or equal to 3.0, the result is indistinguishable from fair resampling in most cases. The default value is None (no optimization). :returns: An :py:class:`~PIL.Image.Image` object. """ if resample is None: type_special = ";" in self.mode resample = Resampling.NEAREST if type_special else Resampling.BICUBIC elif resample not in ( Resampling.NEAREST, Resampling.BILINEAR, Resampling.BICUBIC, Resampling.LANCZOS, Resampling.BOX, Resampling.HAMMING, ): ...

April 17, 2023 · 2 min · jiezi

关于python:基于Python的学生考勤管理系统的设计与实现

拜访【WRITE-BUG数字空间】_[内附残缺源码和文档] 因为技术的变革,人们的生存相较于上个世纪曾经产生了翻天覆地的变动。上个世纪呈现的计算机的设计目标是军事须要,并不适宜私人用处。并且手机也仅仅是一种通信工具,当初手机曾经具备音乐,电视,拍照,游戏,上网等各种各样的性能,手机曾经变成了一个成年人必不可少的工具,成为了人们生存的一部分。之前人们不会想到用手机来实现签到性能,因为那时候手机没有拍照和网络性能,然而当初手机领有了,所以当初的科学技术和人们生存程度仿佛将用智能手机用来实现课堂签到变成了一种切实可行的考勤形式。 那么为什么要用手机来实现考勤呢?难道过来用了很长时间的人工点名不好吗?或者现有的门禁打卡签到也不能间接用于高校课堂吗?以上的办法都可行,然而有着各种各样的毛病。现如今很多高校的老师点名依然都会采纳人工点名的形式,具体的操作一般来说,就是在上课的时候老师点学生的姓名或者学号,当学生听到本人的学号或者姓名的时候,该学生只须要答复“到”即可。这种点名形式十分传统,曾经失去了宽泛的应用,然而如此简略且广泛应用的点名形式却存在这一些致命的破绽。而这些破绽就是当老师点名的时候,学生可能没有听到老师点他的名字或者学号,或者学生喊“到”的时候,老师没有听到学生的回应,这些偶尔状况都会导致统计后果与理论不符。造成较为重大的结果。然而还只是一些老师或者学生忽略的行为导致的考勤记录统计后果出错。最大的隐患是,学生的代课行为并不能被发现,其余学生帮忙被点名的学生答复“到”,这些行为都是成心的,而且一个老师带的学生十分之多,要把所有学生的面貌和学生的学号对应起来是一件极其艰难的事件,因为传统的考勤形式并不能打消这些问题,所以在一些高校中这种代课行为逐步猖狂起来,这不仅是逃课学生本人不恪守学校纪律,而且对其余失常上课的学生来说也不偏心。门禁打卡能无效的解决这种代课和代签到的行为。所以在公司或者国家机构中解决漏签或代签,采纳门禁打卡,在打卡的中央采纳指纹识别技术,人脸识别技术或者虹膜辨认技术来进行打卡签到。然而为什么这种形式并没有利用到高校课堂中呢?这是因为即便抛开这些硬件设施的低廉费用来说,高校课堂考勤与公司或者国家机构最大的不同就是,须要签到的频率不同,上下课要频繁的打卡,而且教学楼的人口密度绝对较大,对于数量十分宏大的学生来说,这些签到形式显得太过于浪费时间了,而且容易造成拥挤,升高学习效率。因而提出一种可能解决高校课堂考勤准确度问题、考勤消耗工夫和考勤机器老本过于低廉这三个问题的学生考勤管理系统就尤为紧迫了。 基于的科技程度和大学生当初人手一部带摄像头的智能手机的无利现状,本文提出了一种采纳 Android 智能手机的摄像头进行人脸识别的电子化学生考勤管理系统,采纳 Android 智能手机人脸识别的益处是利用现有的人手一部带摄像头的智能手机的劣势,罢黜考勤打卡机款式的零碎的老本外,它还进步签到的准确率,杜绝了考勤中代人签到的行为,因为是手机考勤,学生课堂考勤的信息会间接传输到该学生考勤零碎的服务端,如此一来不便了学生和老师查看过往考勤记录以及便于将该考勤记录间接导入到教务零碎等其余平台。

April 17, 2023 · 1 min · jiezi

关于python:transformsResize-和-PIL-的-resize-有什么区别

Q:pytorch 的 torchvision 的 transforms.Resize 和 PIL 的 resize 有什么区别? A:transforms.Resize 和 PIL.Image.resize 都能够用于调整图像大小,但它们的实现形式略有不同,次要体现在以下几个方面: 输出参数类型不同:transforms.Resize 承受的参数能够是整数、元组或列表,别离示意调整后的宽度和高度;而 PIL.Image.resize 承受的参数是一个元组或列表,别离示意调整后的尺寸。解决形式不同:transforms.Resize 的解决形式是依据输出参数调整图像的长和宽,同时放弃宽高比例不变。如果只提供一个参数,则图像的长和宽会依据该参数进行缩放。如果提供两个参数,则图像的长和宽会被别离缩放到指定的大小。在缩放时,可能会进行插值操作,以取得更平滑的成果。PIL.Image.resize 的解决形式是依据输出参数间接调整图像的尺寸,不放弃宽高比例不变。如果新的尺寸与原始尺寸不同,会进行插值操作以适应新的尺寸。输入类型不同:transforms.Resize 的输入是一个 PIL.Image 对象,能够应用 ToTensor 转换成 tensor,而 PIL.Image.resize 的输入是一个 PIL.Image 对象。综上所述,transforms.Resize 更适宜在数据加强时应用,而 PIL.Image.resize 更适宜在对单张图像进行简略解决时应用。 Q:transforms.Resize 和 PIL 的 resize 的插值形式有区别吗?A:是的,transforms.Resize 和 PIL 的 resize 的默认插值形式是不同的。 在 transforms.Resize 中,默认应用的是 PIL.Image.BILINEAR,即双线性插值。而在 PIL 的 resize 中,默认应用的是 PIL.Image.BICUBIC,即三次样条插值。 当然,transforms.Resize 也能够指定其余的插值形式,如 PIL.Image.NEAREST(最近邻插值)、PIL.Image.BICUBIC 等。同样地,也能够在 PIL 的 resize 中指定其余的插值形式。

April 17, 2023 · 1 min · jiezi

关于python:如何把-imagetranspose2-0-1-之后再复原

在对图像进行转置操作时,能够应用 numpy.transpose 函数将图像的通道轴与高度轴、宽度轴进行替换,从而达到目标。例如,如果要将一个 RGB 图像转换为通道-高度-宽度的数组,能够应用以下代码: import numpy as npfrom PIL import Image# 加载图像image = Image.open("test.jpg")# 将图像转换为数组array = np.asarray(image)# 将通道轴与高度、宽度轴替换transposed_array = np.transpose(array, (2, 0, 1))# 将转置后的数组转换为图像transposed_image = Image.fromarray(transposed_array.transpose(1, 2, 0))在下面的代码中,咱们首先应用 PIL 库的 Image.open 函数加载一个图像,而后应用 numpy.asarray 函数将图像转换为数组。接下来,咱们应用 numpy.transpose 函数将通道轴与高度、宽度轴替换,并将后果存储在 transposed_array 变量中。最初,咱们将转置后的数组再次进行转置,并应用 PIL.Image.fromarray 函数将其转换为图像。这样就能够将转置后的图像再次还原了。

April 17, 2023 · 1 min · jiezi

关于python:Python哪种方式循环最快

家喻户晓,Python不是一种执行效率较高的语言。此外在任何语言中,循环都是一种十分耗费工夫的操作。如果任意一种简略的单步操作消耗的工夫为 1 个单位,将此操作反复执行上万次,最终消耗的工夫也将增长上万倍。while和for是Python中罕用的两种实现循环的关键字,它们的运行效率实际上是有差距的。比方上面的测试代码: import timeitdef while_loop(n=100_000_000): i = 0 s = 0 while i < n: s += i i += 1 return sdef for_loop(n=100_000_000): s = 0 for i in range(n): s += i return sdef main(): print('while loop\t\t', timeit.timeit(while_loop, number=1)) print('for loop\t\t', timeit.timeit(for_loop, number=1))if __name__ == '__main__': main()# => while loop 4.718853999860585# => for loop 3.211570399813354这是一个简略的求和操作,计算从 1 到 n 之间所有自然数的总和。能够看到 for 循环相比 while 要快 1.5 秒。其中的差距次要在于两者的机制不同。在每次循环中,while 实际上比 for 多执行了两步操作:边界检查和变量 i 的自增。即每进行一次循环,while 都会做一次边界查看 (while i < n)和自增计算(i +=1)。这两步操作都是显式的纯 Python 代码。for 循环不须要执行边界检查和自增操作,没有减少显式的 Python 代码(纯 Python 代码效率低于底层的 C 代码)。当循环的次数足够多,就呈现了显著的效率差距。能够再减少两个函数,在 for 循环中加上不必要的边界检查和自增计算: ...

April 17, 2023 · 2 min · jiezi

关于python:计算向量距离的时候l2和-ip-哪个更好有什么区别应该如何选择

Q:计算向量间隔的时候,l2和 ip 哪个更好?有什么区别?应该如何抉择? A:计算向量间隔的时候,L2范数和内积(IP)都是罕用的度量形式。它们的计算方法和意义有所不同,因而在不同的场景下抉择不同的度量形式会更加适合。 L2范数是一种欧氏间隔,示意向量之间的直线间隔,计算形式是将两个向量中对应地位的元素相减后平方,再将平方和求和并开平方。L2范数在数值计算、信号处理、图像处理、机器学习等畛域中广泛应用。 内积(IP)也称为点积,示意两个向量之间的类似水平,计算形式是将两个向量中对应地位的元素相乘后求和。内积在自然语言解决、计算机视觉等畛域中罕用。 在抉择L2范数和内积作为间隔度量形式时,须要依据理论状况进行抉择。一般来说,如果须要思考各个维度之间的权重关系,或者须要将向量转化为单位向量进行类似度计算,则应用L2范数更为适合。如果只须要思考向量之间的类似度,而不须要思考权重关系,则能够应用内积。 须要留神的是,在一些特定的场景下,例如须要准确计算间隔的场景下,L2范数计算中的开平方操作会带来额定的计算量,因而可能须要抉择内积计算形式。同时,L2范数也容易受到极其值的影响,须要审慎应用。 Q:比拟图片类似度,计算向量间隔的时候,l2和 ip 哪个更好? A:当须要比拟图片类似度时,倡议应用L2范数来计算向量间隔。因为L2范数对于向量中每个维度都有肯定的权重,能够较好地反映向量之间的差别。而图片向量通常蕴含很多维度(如RGB三色通道),而且不同维度之间的权重很重要,因而应用L2范数能够更好地反映图片向量之间的差别。相比之下,内积不太适宜用于比拟图片类似度,因为它只思考了向量之间的类似度而疏忽了各个维度之间的权重关系,无奈很好地反映图片向量的特色差别。

April 17, 2023 · 1 min · jiezi

关于python:为什么milvus-计算出来的欧式距离和实际不符合

为什么milvus 计算出来的 l2 和 numpy 计算结果不一样 我本地应用自定义的 l2 函数: from typing import Listimport numpydef l2(vector1: List[float], vector2: List[float]) -> float: vector1 = numpy.array(vector1) vector2 = numpy.array(vector2) return float(numpy.sqrt(numpy.sum(numpy.square(vector1 - vector2))))和 milvus 的 "metric_type": 'L2' 返回后果不一样,milvus 返回的 distance 要比我自定义的 l2 结算后果小很多是怎么回事? 搜寻 milvus 的形式: 我自定义的 l2 和 python 的 face_recognition 库的 l2 的计算结果是一样的,所以我感觉是 milvus 的问题,然而我不确定是不是应用 milvus 的时候,哪个参数没有设置好? milvus2.2.2 milvus的欧式间隔没有开平方 milvu 的 l2 相当于是 numpy.sum(numpy.square(vector1 - vector2)) 是吗? ...

April 17, 2023 · 1 min · jiezi

关于python:FECLI基于pywebview搭建企业级桌面端

背景web在桌面端的体现一直在演变,从nw 到electron,到现如今有很多现成客户端框架。大都架构是web内核+服务端语言。 例如: electron=web核+nodejspywebview=web核 加 pythontauri=web核 加 rustwebview =web核 加 c++/go只有找到适宜以后业务的框架即可。 简介本文次要介绍在window环境下pywebview 3.x 应用的一些注意事项。pywbview 官网文档 装置.NET>4.0 (一个和windows资源相干的调用库)如果没有.NET>4.0的须要装置。个别win10都自带pythonnet (一个python调.NET的库)须要先装置 pythonnet 库WebView2 (一个Edge的内核)下载至于如何检查和让用户装置,上面会阐明。 编码与踩坑配置pywebview反对很多web内核。如果不指定web内核,pywebview会主动抉择,比方啥浏览器都没装的可能会用IE11渲染。所以咱们指定内核(WebView2)如下 webview.start(gui='edgechromium',private_mode=True)其中private_mode=True则开启浏览器缓存(localStorage等) 自实现拖拽拉伸窗体拖拽: //js mousemove handlerbridge.move(e.screenX, e.screenY)//理论调用window.pywebview?.api.move(left,top);拉伸: 不举荐,未解决windows缩放分辨率时窗体左边有一条缝隙。综上,尽可能用自带的。 用户环境查看webview2与装置参考了tkwebview2 def have_runtime():#检测是否含有webview2 runtime from webview.platforms.winforms import _is_chromium return _is_chromium()def install_runtime():#装置webview2 runtime #https://go.microsoft.com/fwlink/p/?LinkId=2124703 from urllib import request import subprocess import os url=r'https://go.microsoft.com/fwlink/p/?LinkId=2124703' path=os.getcwd()+'\\webview2runtimesetup.exe' unit=request.urlopen(url).read() with open(path,mode='wb') as uf: uf.write(unit) cmd=path p=subprocess.Popen(cmd,shell=True) return_code=p.wait()#期待子过程完结 os.remove(path) return return_code管理员与注册表解决以下兼容问题: 解决Renderer Code Integrity造成Chrome浏览器解体解决content type编码问题导致html无奈被浏览器解析,页面加载不出解决非管理员权限关上时,以管理员权限重启本身 def check_reg(): try: # https://zhuanlan.zhihu.com/p/400960997 ok=winreg.CreateKeyEx(winreg.HKEY_LOCAL_MACHINE,r'SOFTWARE\Policies\Microsoft\Edge\WebView2',reserved=0,access=winreg.KEY_WRITE) winreg.SetValueEx(ok,'RendererCodeIntegrityEnabled',0,winreg.REG_DWORD,0) winreg.CloseKey(ok) # https://blog.csdn.net/weixin_46099269/article/details/113185882 ok=winreg.CreateKeyEx(winreg.HKEY_CLASSES_ROOT,r'.js',reserved=0,access=winreg.KEY_WRITE) winreg.SetValueEx(ok,'Content Type',0,winreg.REG_SZ,'text/javascript') winreg.CloseKey(ok) except PermissionError: ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) exit()端口占用解决上一个flask服务始终占用端口 ...

April 16, 2023 · 2 min · jiezi

关于python:深入理解-python-虚拟机字节码教程3深入剖析循环实现原理

深刻了解 python 虚拟机:字节码教程(3)——深刻分析循环实现原理在本篇文章当中次要给大家介绍 cpython 当中跟循环相干的字节码,这部分字节码相比起其余字节码来说绝对简单一点,通过剖析这部分字节码咱们对程序的执行过程将会有更加粗浅的了解。 循环一般 for 循环实现原理咱们应用各种例子来了解和循环相干的字节码: def test_loop(): for i in range(10): print(i)下面的代码对应的字节码如下所示: 8 0 LOAD_GLOBAL 0 (range) 2 LOAD_CONST 1 (10) 4 CALL_FUNCTION 1 6 GET_ITER >> 8 FOR_ITER 12 (to 22) 10 STORE_FAST 0 (i) 9 12 LOAD_GLOBAL 1 (print) 14 LOAD_FAST 0 (i) 16 CALL_FUNCTION 1 18 POP_TOP 20 JUMP_ABSOLUTE 8 >> 22 LOAD_CONST 0 (None) 24 RETURN_VALUE首先是 range 他对应一个 builtin 的类型,在执行下面的字节码的过程当中,首先先将 range 将在进入栈空间当中,而后将常量 10 加载进入栈空间当中,最初会调用指令 CALL_FUNCTION,这个时候会将栈顶的两个元素弹出,调用 range 类型的创立函数,这个函数会返回一个 range 的实例对象。 ...

April 15, 2023 · 3 min · jiezi

关于python:验证码逆向专栏某验深知-V2-业务风控逆向分析

申明本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关! 本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】分割作者立刻删除! 逆向指标 指标:某验深知 V2 业务风控逆向剖析主页:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9kay12Mi5odG1s深知简介某验深知通过无感采集客户端数据,对用户的环境、标识、行为操作等进行智能化剖析,联合业务场景无效辨认有潜在危险的用户。整个辨认过程不烦扰用户,不打断业务既有流程。残缺通信流程如下: 抓包剖析拜访首页,会引入一个 v2.sense.js,前面接了个 id,须要将其提取进去,后续有用到,当然个别状况下,同一个业务这个 id 应该是一样的,间接复制下来写死也行。 接着有个 gettype 的申请,这里次要返回一些资源门路,其中有个 gct.xxx.js,这个 JS 名称每隔一段时间就会变动,这个 JS 会生成一个键值对,例如 {'xnbw': '1158444372'},JS 变动,这个键值对也会变动,这个键值对参加了前面加密参数的生成,在某验系列产品中都有这个货色,大量测试将其固定发现也能够通过验证,盲猜大量申请或者某些校验严格的网站可能有影响,倡议还是动静去申请这个 JS 来获取最新的键值对,这个后文具体再说。 而后是 judge 的申请,这个申请页面一加载就实现了,不须要手动点击申请,其中 Query String Parameters 里有个 app_id 就是咱们后面提到的 id,Request Payload 就是一串超长的字符串,这个也是咱们须要逆向的参数。该申请如果验证胜利,会返回一个 session_id。 而后就是业务接口了,本例中业务接口是 verify-dk-v2,也就是一个登录接口,带上后面 judge 接口返回的 session_id 即可申请胜利。 逆向剖析因为咱们逆向的参数 Request Payload 没有键名导致不能间接搜寻关键字,所以只能跟栈或者下个 XHR 断点,跟栈能够在 sense.2.3.0.js 第 6144 行找到一个 e + h[AUJ_(1173)],这个就是正确的 Request Payload 值。 上图中其实外围代码就四行,后文也是围绕这四行代码来剖析的: ...

April 13, 2023 · 3 min · jiezi

关于python:0基础学爬虫爬虫基础之数据存储

大数据时代,各行各业对数据采集的需要日益增多,网络爬虫的使用也更为宽泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前曾经推出不少爬虫进阶、逆向相干文章,为实现从易到难全方位笼罩,特设【0根底学爬虫】专栏,帮忙小白疾速入门爬虫,本期为数据存储。概述上期咱们介绍到了文件存储,讲到了如何将数据存入各种文本文件之中,这种数据存储形式尽管很简便,然而存在很多问题,如:数据容易失落、文件容易损坏、数据不易共享。因而本期将介绍更加实用的数据库存储形式。 本文将介绍三种风行的数据存储技术: MySQL:一种关系型数据库管理系统,宽泛用于企业级应用程序中 MongoDB:一种文档型数据库,适宜解决半结构化数据和大规模数据集。 Redis:一种内存数据库,用于解决高速读写操作和缓存数据。 在本文中,咱们将别离介绍 MySQL、MongoDB 和 Redis 的优缺点、实用场景以及如何抉择最适宜本人的数据库存储技术。作为爬虫初学者,本文将帮忙你更好地了解这三种数据库存储技术的工作原理,以及如何抉择适宜你的应用程序的数据库。 MySQL介绍MySQL 是一种开源的关系型数据库管理系统,是目前最风行的关系型数据库之一。MySQL 是一个疾速、高效的数据库系统,可能解决大量的数据和申请。另一个长处是它的灵活性和可扩展性,能够依据须要进行配置和调整,以满足不同利用的需要。MySQ L应用SQL(结构化查询语言)作为其查问和治理语言,SQL 是一种规范的关系型数据库语言,用于定义、操作和查问数据。 MySQL 被宽泛用于 Web 开发、数据分析和数据存储等畛域,是一个十分弱小和受欢迎的数据库系统。同时,因为它是开源软件,因而能够在不领取任何费用的状况下应用和批改,这也使得它成为了很多开发者的首选数据库系统。 装置首先须要装置 MySQL 数据库,在 MySQL官网 下载对应版本的文件进行装置。 装置好 MySQL 并确保 MySQL 可能失常运行后须要装置 Python 的第三方库 PyMySQL。 pip install pymysql 应用在应用 Python 操作 MySQL 数据库前,咱们须要先理解一下根本的 sql 语句。 sql 语句SQL 即结构化查询语言 (Structured Query Language),是一种非凡目标的编程语言,是一种数据库查问和程序设计语言。 数据库操作 -- 创立数据库create database 数据库库名;-- 查看所有数据库show databases;-- 应用数据库use 数据库库名;-- 删除数据库drop database 数据库库名;表操作 -- 创立表create table 表名( 属性名 数据类型 束缚, . .);-- 查看表构造desc 表名;-- 批改表名alter table 表名 rename to 新的表名;-- 增加新字段alter table 表名 add 属性;数据类型;束缚;-- 删除一个字段alter table 表名 drop 属性名;-- 删除表drop table 表名;束缚形容PRIMARY KEY主键束缚。第一范式要求每一张表都应该有一个主键作为表的惟一标识,主键具备唯一性。UNIQUE惟一束缚。标识该属性的值是惟一的。NOT NULL非空束缚。标识该属性的值不能为空。FOREIGN KEY外键束缚。 标识该属性为该表的外键,与某表的主键关联。AUTO_INCREMENT标识该属性的值主动减少DEFAULT为该属性设置默认值插入数据 ...

April 13, 2023 · 5 min · jiezi

关于python:http-params规范中允许一个参数多次出现吗

依据HTTP标准,同一个参数能够在申请的URL查问字符串(query string)、申请体(body)、HTTP头(headers)中呈现屡次,然而具体是否容许要看接管参数的服务器端程序实现。 例如,查问字符串中的参数能够应用“参数名=参数值1&参数名=参数值2”的形式传递多个值。相似的,在HTTP头中,能够应用“参数名: 参数值1\r\n参数名: 参数值2\r\n”的形式传递多个值。 在理论应用中,有些HTTP参数标准中会明确规定同一个参数不容许呈现屡次,而有些则容许。因而,在应用HTTP参数时,倡议认真查看相应的标准文档并依据须要进行参数设计。

April 13, 2023 · 1 min · jiezi

关于python:peewee-的-BooleanField-是翻译为-tinyint1-还是-enumtruefalse

mysql 中实现 bool 类型的字段,个别是应用 tinyint(1) 然而有些中央,会应用 enum('true','false') 实现 bool 那么,peewee 的 BooleanField 类型翻译为 mysql 的 DDL 的时候,是翻译为 tinyint(1) 还是 enum('true','false') 呢? 答案是 tinyint(1) 常见问题 QA Q:对于 mysql,tinyint(1) 和 tinyint 有区别吗?应该没有吧A:在MySQL中,tinyint和tinyint(1)在语义上是雷同的,它们都是用于示意小整数值的数据类型。在理论应用中,这两种类型的体现是一样的,它们都占用一个字节的存储空间,并能够存储-128到127之间的整数值(如果是无符号类型,则能够存储0到255之间的整数值)。 然而,在MySQL 8.0之前的版本中,tinyint(1)的行为略有不同。在这些旧版本中,当应用tinyint(1)定义列时,MySQL将该列解释为一个布尔类型(BOOL或BOOLEAN),而不是整数类型。也就是说,tinyint(1)被视为只能存储0或1的类型。然而,在MySQL 8.0中,tinyint(1)的行为曾经扭转,它被视为一个一般的整数类型,与tinyint完全相同。 因而,在MySQL 8.0及以上版本中,tinyint(1)和tinyint是雷同的,它们都示意一个占用一个字节存储空间的小整数值。然而,如果您正在应用MySQL 8.0之前的版本,则应该留神tinyint(1)与tinyint之间的差别,并理解tinyint(1)被解释为布尔类型的行为。

April 12, 2023 · 1 min · jiezi

关于python:Flaskcaching-的缓存与删除-避坑指南

根本用法基于 Flask 利用,难免会用到 Flask-cache (或 Flask-cacheing,两者API 基本相同)。它通过装璜器,十分优雅地实现了函数调用的缓存。装璜器能够间接加在 view function ,或者一般 function 上,相似上面的样子: @app.route('/demo/student/all', methods=['GET'])@cache.cached(timeout=600)def get(): students = Student.query.all() return response_ok(students)(如果函数有参数,并且心愿针对不同实参值,做不同的缓存,那就用 _@cache.memerized _装璜器)增加了装璜器的函数,在第一次被调用之后,返回值就被在缓存有效期内,示例中的timeout 参数,保障了缓存在600秒后超时生效,再次调用函数本体取得最新数据。 view function 缓存管制但有时咱们须要管制这个缓存的更新——比方下面的例子中,每次新增一个学生、或者更改学生数据,就从新刷新一下缓存,而不须要等它天然超时。这时就须要显式调用 delete 函数,例如: del_res = cache.delete('/demo/student/all')对于 view function 来说,这里 delete 的参数,就恰好等于 route 里的 path,如果 route 来自于一个下级的 blueprint,要记得把下级 path 带上。如果你要指定 cache 的 key,能够加上 key_prefix 参数,相似上面这样: @app.route('/demo/student/all', methods=['GET'])@cache.cached(timeout=600, key_prefix='res_student_all')def get(): ...留神第一个坑来了:因为名字里有个 prefix,你可能会感觉它是 key 的前缀,删除的时候,会想着怎么组合一下这个参数和 path;然而实际上却不必任何组合,path 在这里曾经有效了,删除时间接用这个 key_prefix 当参数就能够: del_res = cache.delete('res_student_all')事实上,这个 key_prefix 既不是 key 的前缀,也不是整个 key,它应该叫 key 的后缀更正当,真正保留的 key(存在那里取决于配置,能够有内存缓存SimpleCache、redis缓存等等)前缀是这个样子的:**flask_cache_**,而无论是 path 还是 key_prefix,都会在 hash 之后拼接在前面。 ...

April 11, 2023 · 1 min · jiezi

关于python:利用强化学习QLearning实现最短路径算法

如果你是一名计算机专业的学生,有对图论有根本的理解,那么你肯定晓得一些驰名的最优门路解,如Dijkstra算法、Bellman-Ford算法和a*算法(A-Star)等。 这些算法都是大佬们通过有数小时的致力才发现的,然而当初曾经是人工智能的时代,强化学习算法可能为咱们提出和前辈一样好的解决方案吗? 本文中咱们将尝试找出一种办法,在从目的地a挪动到目的地B时尽可能减少遍历门路。咱们应用本人的创立虚构数据来提供演示,上面代码将创立虚构的交通网格: importnetworkxasnx # Create the graph object G=nx.Graph() # Define the nodes nodes= ['New York, NY', 'Los Angeles, CA', 'Chicago, IL', 'Houston, TX', 'Phoenix, AZ', 'Dallas, TX', 'Miami, FL'] # Add the nodes to the graph G.add_nodes_from(nodes) # Define the edges and their distances edges= [('New York, NY', 'Chicago, IL', {'distance': 790}), ('New York, NY', 'Miami, FL', {'distance': 1300}), ('Chicago, IL', 'Dallas, TX', {'distance': 960}), ('Dallas, TX', 'Houston, TX', {'distance': 240}), ('Houston, TX', 'Phoenix, AZ', {'distance': 1170}), ('Phoenix, AZ', 'Los Angeles, CA', {'distance': 380}), ('Los Angeles, CA', 'Dallas, TX', {'distance': 1240}), ('Los Angeles, CA', 'Chicago, IL', {'distance': 2010})] # Add the edges to the graph G.add_edges_from(edges)运行起来没有报错,然而咱们不晓得数据是什么样子的,所以让咱们先进行可视化,理解数据: ...

April 11, 2023 · 2 min · jiezi

关于python:译深入浅出Python-描述符

写在后面我感觉抓住以下几处重点大略就搞明确这玩意儿了 一个描述符是一个有“绑定行为”的对象属性(object attribute),它的访问控制会被形容器协定办法重写。任何定义了 __get__, __set__ 或者 __delete__ 任一办法的类称为描述符类,其实例对象便是一个描述符,这些办法称为描述符协定。当对一个实例属性进行拜访时,Python 会按 obj.__dict__ → type(obj).__dict__ → type(obj)的父类.__dict__ 程序进行查找,如果查找到指标属性并发现是一个描述符,Python 会调用描述符协定来扭转默认的管制行为。描述符是 @property @classmethod @staticmethod 和 super 的底层实现机制。同时定义了 __get__ 和 __set__ 的描述符称为 数据描述符(data descriptor);仅定义了 __get__ 的称为 非数据描述符(non-data descriptor) 。两者区别在于:如果 obj.__dict__ 中有与描述符同名的属性,若描述符是数据描述符,则优先调用描述符,若是非数据描述符,则优先应用 obj.__dict__ 中属性。描述符协定必须定义在类的档次上,否则无奈被主动调用。 翻译原文原文:Python Descriptors: An Introduction描述符是Python的一项特定性能,可为语言暗藏的许多魔力提供弱小的反对。如果您已经认为Python描述符是很少应用的高级主题,那么本教程就是帮忙您理解此弱小性能的现实工具。您将理解为什么Python描述符如此乏味,以及在什么状况下应用它们。 在本教程完结时,您将理解: 什么是 Python 的描述符它们在 Python 外部应用的中央如何实现本人的描述符何时应用 Python 描述符本教程实用于中级到高级 Python 开发人员,因为它波及 Python 外部。然而,如果您还没有达到这个程度,那就持续浏览吧!您会找到无关 Python 和 属性查找链的有用信息。 什么是Python描述符?描述符是实现描述符协定办法的Python对象,当您将其作为其余对象的属性进行拜访时,该描述符使您可能创立具备非凡行为的对象。在这里,您能够看到描述符协定的正确定义: __get__(self, obj, type=None) -> object__set__(self, obj, value) -> None__delete__(self, obj) -> None__set_name__(self, owner, name)如果您的描述符仅实现__get__(),则称其为非数据描述符。如果它实现__set__()或__delete__(),则称其为数据描述符。请留神,这种区别不仅在于名称,还在于行为上的区别。这是因为数据描述符在查找过程中具备优先级,这将在前面介绍。 ...

April 11, 2023 · 5 min · jiezi

关于python:深入理解-python-虚拟机字节码教程2控制流是如何实现的

深刻了解 python 虚拟机:字节码教程(2)——控制流是如何实现的?在本篇文章当中次要给大家剖析 python 当中与控制流无关的字节码,通过对这部分字节码的理解,咱们能够更加深刻理解 python 字节码的执行过程和控制流实现原理。 控制流实现控制流这部分代码次要波及上面几条字节码指令,上面的所有字节码指令都会有一个参数: JUMP_FORWARD,指令残缺条指令会将以后执行字节码指令的地位加上这个参数,而后跳到对应的后果继续执行。POP_JUMP_IF_TRUE,如果栈顶元素等于 true,将字节码的执行地位改成参数的值。将栈顶元素弹出。POP_JUMP_IF_FALSE,这条指令和 POP_JUMP_IF_TRUE 一样,惟一差异就是判断栈顶元素是否等于 true。JUMP_IF_TRUE_OR_POP,如果栈顶元素等于等于 true 则将字节码执行地位设置成参数对应的值,并且不须要将栈顶元素弹出。然而如果栈顶元素是 false 的话那么就须要将栈顶元素弹出。JUMP_IF_FALSE_OR_POP,和JUMP_IF_TRUE_OR_POP一样只不过须要栈顶元素等于 false 。JUMP_ABSOLUTE,间接将字节码的执行地位设置成参数的值。总的来说,这些跳转指令能够让 Python 的解释器在执行字节码时依据特定条件来扭转执行流程,实现循环、条件语句等根本语言构造。 当初咱们应用一个例子来深刻了解下面的各种指令的执行过程。 import disdef test_control01(): a = 1 if a > 1: print("a > 1") elif a < 1: print("a < 1") else: print("a == 1")if __name__ == '__main__': dis.dis(test_control01)下面的程序输入后果如下所示: 6 0 LOAD_CONST 1 (1) 2 STORE_FAST 0 (a) 8 4 LOAD_FAST 0 (a) 6 LOAD_CONST 1 (1) 8 COMPARE_OP 4 (>) 10 POP_JUMP_IF_FALSE 22 9 12 LOAD_GLOBAL 0 (print) 14 LOAD_CONST 2 ('a > 1') 16 CALL_FUNCTION 1 18 POP_TOP 20 JUMP_FORWARD 26 (to 48) 10 >> 22 LOAD_FAST 0 (a) 24 LOAD_CONST 1 (1) 26 COMPARE_OP 0 (<) 28 POP_JUMP_IF_FALSE 40 11 30 LOAD_GLOBAL 0 (print) 32 LOAD_CONST 3 ('a < 1') 34 CALL_FUNCTION 1 36 POP_TOP 38 JUMP_FORWARD 8 (to 48) 13 >> 40 LOAD_GLOBAL 0 (print) 42 LOAD_CONST 4 ('a == 1') 44 CALL_FUNCTION 1 46 POP_TOP >> 48 LOAD_CONST 0 (None) 50 RETURN_VALUE咱们当初来模仿一下下面的字节码执行过程,咱们应用 counter 示意以后字节码的执行地位: ...

April 10, 2023 · 2 min · jiezi

关于python:3月更新-Visual-Studio-Code-Python

咱们很快乐地发表,2023年3月版 Visual Studio Code Python 和 Jupyter 扩大现已推出! 此版本包含以下改良: 后退按钮和勾销性能增加到创立环境命令默认状况下,Python 扩大不再附带 isortJupyter 笔记本中内核抉择的改良Python Pulse 上的 Python for VS Code 团队如果您有趣味,能够在咱们的更新日志中查看 Python、Jupyter 和 Pylance 扩大的残缺改良列表。 后退按钮和勾销性能增加到创立环境命令在此版本中,咱们增加了一些性能,使您能够在应用 Python:创立环境(Python: Create Environment)命令时返回(Back)或勾销(Cancel)。此更改将容许您返回到之前的步骤,以更改环境创立或通过按键或按钮齐全勾销操作。此加强性能已利用于所有创立环境(Create Environment)的UI,并将在 Jupyter 扩大中呈现。 默认状况下,Python 扩大不再附带 isort咱们始终在听取社区的反馈,并听到了缩小默认状况下与 Python 扩大一起装置的扩大数量的申请。咱们还心愿确保社区创立的扩大与咱们作为团队提供的任何扩大相比被同等对待,例如人们认为 Ruff 扩大用于导入排序。随后,从这个版本开始,isort 不再默认与 Python 扩大一起装置。 isort 扩大依然能够从市场上下载,以抉择退出它提供的性能。 Jupyter 笔记本中内核抉择的改良在 Jupyter notebook 中抉择内核时,选择器当初默认显示最近应用的内核。这是对以前行为的不便更改,因为它用于显示所有可用的内核。当您装置了最新的 Jupyter 和 Python 扩大时,您依然能够通过辅助选择器“抉择另一个内核...”查看所有可用内核,这将按其起源(例如:Jupyter 内核、Python 环境等)对所有内核进行分组。 其余变动和加强咱们还增加了一些小的加强性能并修复了用户申请的问题,这些性能应该会改善您在 Visual Studio Code 中应用 Python 和 Jupyter Notebooks 的体验。一些显著的变动包含: 改良的 IntelliSense 对 Pylance 的 pytest 的反对当初曾经过预览并在这个最新版本中可用。对于 Python 文件,该设置当初默认启用,这使得每个人都能够应用 Pylance 主动缩进。editor.formatOnType 设置当初默认启用 Python 文件,这使得每个人都能够应用 Pylance 进行主动缩进。Jupyter 扩大当初反对 IPyWidgets 版本 8。对 Jupyter 扩大的交互式窗口内核抉择的改良。将应用以后流动的解释器,除非先前为该工作区中的交互式窗口抉择了另一个内核。咱们还要特别感谢本月的贡献者: ...

April 10, 2023 · 1 min · jiezi

关于python:Python写一个GUI界面这个界面实时跟随微信窗口移动

Python写一些简略的GUI界面也是非常简单的,并且Python有着丰盛的库,这些库能够很不便咱们去操作Windows零碎,搭配界面,能够做出很多精美的小工具。本文的案例写一个简略的实例,应用Python创立一个窗口,这个窗口实时监听微信PC版客户端窗口的状态,并且实时追随在微信电脑版的右侧。 代码import tkinter as tkimport win32guiimport win32conclass FollowWeChatWindow(tk.Tk): def __init__(self): super().__init__() # 暗藏窗口边框和标题栏 self.overrideredirect(True) self.title("追随微信的窗口") # 窗口置顶 self.wm_attributes('-topmost', True) # 创立一个标签,用于显示窗口地位信息 self.label = tk.Label(self, text='') self.label.pack() # 启动定时器 self.after(50, self.update_window) def update_window(self): # 获取微信窗口句柄和地位 wechat_hwnd = win32gui.FindWindow('WeChatMainWndForPC', None) if wechat_hwnd: wechat_rect = win32gui.GetWindowRect(wechat_hwnd) # print(win32gui.GetWindowText(win32gui.GetForegroundWindow())) # 获取以后鼠标点击的窗口的句柄的题目 getClickHownTitle = win32gui.GetWindowText(win32gui.GetForegroundWindow()) # 判断微信窗口状态,显示或暗藏本窗口 if win32gui.GetForegroundWindow() == wechat_hwnd: # 以后点击的句柄=微信的句柄 self.wm_attributes('-alpha', 1.0) elif getClickHownTitle == '追随微信的窗口': # 以后点击的窗口的题目=追随微信的窗口 self.wm_attributes('-alpha', 1.0) else: # 不满足以上两个条件的其中一条,都得暗藏窗口 self.wm_attributes('-alpha', 0.0) print(getClickHownTitle) # 获取微信窗口高度 WeChat_Height = wechat_rect[3] - wechat_rect[1] # 更新本窗口地位 self.geometry('200x%d+%d+%d' % (WeChat_Height, wechat_rect[2], wechat_rect[1])) # 更新标签文本 self.label.configure(text=win32gui.GetForegroundWindow()) else: # 微信窗口未找到,暗藏本窗口 self.wm_attributes('-alpha', 0.0) # 持续定时器 self.after(50, self.update_window)if __name__ == '__main__': app = FollowWeChatWindow() app.mainloop()代码解释在这个示例中,应用了Python自带的tkinter界面库来实现一个简略的无边框窗口,窗口宽度200,高度与微信窗口统一。通过获取微信客户端的句柄来实时获取微信窗口的地位及大小,启动定时器实时获取到微信的显示状态,50ms更新一次状态以达到追随的目标。 ...

April 10, 2023 · 1 min · jiezi

关于python:性能最快的代码分析工具Ruff-正在席卷-Python-圈

几天前,Python 开源社区又出了一个不小的新闻:HTTPX 和 Starlette 在同一天将在用的代码剖析工具(flake8、autoflake 和 isort)对立替换成了 Ruff。 HTTPX 是一个反对异步的 HTTP 客户端,Starlette 是一个轻量级的 ASGI 框架,它们都是 Python 社区里的明星我的项目,目前加起来有近 20K star。它们都抉择了应用 Ruff,再次扩充了 Ruff 的利用幅员。 Ruff 是个诞生仅仅 8 个月的新兴我的项目,但已呈现出一种席卷 Python 社区的趋势!很多出名的开源我的项目已驳回 Ruff,比方 Transformers、Pandas、FastAPI、Airflow、SciPy、Bokeh、Jupyter、LangChain、PaddlePaddle、Sphinx、Pydantic、LlamaIndex…… Ruff 是什么?为什么它能吸引大量的开源我的项目应用?相比于其它代码剖析工具,它有哪些突出之处,是否还有一些局限性?当初是否值得将我的项目在用的工具都替换成它呢? 带着这些问题,本文将带你全方位理解这个火爆的我的项目。 Ruff 减速 Rust 与 Python 的交融Ruff 诞生于 2022 年 8 月,它是一个用 Rust 语言编写的高性能的 Python 动态代码剖析工具,比其它剖析工具快几个数量级(10-100 倍),而且性能也很全面。 代码剖析工具 即 Linter,用于查看代码中的语法错误、编码标准问题、潜在的逻辑问题和代码品质问题等,能够提供实时反馈和主动修复倡议。 在 Ruff 呈现之前,社区里的代码剖析工具呈现出百花齐放之势,比方有 Pylint、Flake8、Autoflake、Pyflakes、Pycodestyle 等等,它们的共同点是都应用 Python 编写而成。 Ruff 异军突起,在性能方面立于不败之地,次要得益于 Rust 人造的速度劣势。Ruff 的呈现,就像基于大语言模型的 ChatGPT 横空出世,所有竞争对手霎时就黯淡失色了。 两个月前,我翻译了一篇《Python 2023 年的 3 个趋势》,它预测的第一个趋势就是 Rust 将放慢融入到 Python 相干的我的项目和工具中,举出的例子就有 Ruff。 ...

April 9, 2023 · 2 min · jiezi

关于python:深入理解-python-虚拟机字节码教程1原来装饰器是这样实现的

深刻了解 python 虚拟机:字节码教程(1)——原来装璜器是这样实现的在本篇文章当中次要给大家介绍在 cpython 当中一些比拟常见的字节码,从根本上了解 python 程序的执行。在本文当中次要介绍一些 python 基本操作的字节码,并且将从字节码的角度剖析函数装璜器的原理! Python 常见字节码LOAD_CONST这个指令用于将一个常量加载到栈中。常量能够是数字、字符串、元组、列表、字典等对象。例如: >>> dis.dis(lambda: 42) 1 0 LOAD_CONST 1 (42) 2 RETURN_VALUELOAD_NAME这个指令用于将一个变量加载到栈中。例如: >>> dis.dis(lambda: x) 1 0 LOAD_GLOBAL 0 (x) 2 RETURN_VALUE>>>STORE_NAME这个指令用于将栈顶的值存储到一个变量中。例如: >>> dis.dis("x=42") 1 0 LOAD_CONST 0 (42) 2 STORE_NAME 0 (x) 4 LOAD_CONST 1 (None) 6 RETURN_VALUEBINARY_ADD这个指令用于对栈顶的两个值进行加法运算并将后果推送到栈中。 >>> dis.dis(lambda: x + y) 1 0 LOAD_GLOBAL 0 (x) 2 LOAD_GLOBAL 1 (y) 4 BINARY_ADD 6 RETURN_VALUEBINARY_SUBTRACT这个指令用于对栈顶的两个值进行减法运算并将后果推送到栈中。 >>> dis.dis(lambda: x - y) 1 0 LOAD_GLOBAL 0 (x) 2 LOAD_GLOBAL 1 (y) 4 BINARY_SUBTRACT 6 RETURN_VALUE同样的加减乘除取余数的字节码如下所示: ...

April 9, 2023 · 4 min · jiezi

关于python:Python环境部署及虚拟环境部署

筹备工作1、创立用户和配置环境参数(1)、创立用户组和创立所需目录[root@python ~]# groupadd python_env[root@python ~]# useradd -d /home/python_env -g python_env -m python_env[root@python ~]# chmod 755 /home/python_env[root@python ~]# mkdir -p /home/python_env/operation_workspaces[root@python ~]# mkdir -p /home/python_env/software[root@python ~]# mkdir -p /home/python_env/yunwei[root@python ~]# mkdir -p /home/python_env/virtual_environment[root@python ~]# mkdir -p /data/python_env/yunwei_platforms[root@python ~]# chown -R python_env:python_env /data/python_env[root@python ~]# chown -R python_env:python_env /home/python_env(2)、通过yum装置必要依赖[root@python ~]# yum install -y gcc* zlib* openssl-devel切换到普通用户,编译装置python1、下载https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz2、部署(1)、解压源码包并编译装置[python_env@python ~]$ tar -zxvf $HOME/software/Python-3.6.5.tgz[python_env@python ~]$ cd $HOME/software/Python-3.6.5[python_env@python software/Python-3.6.5]$ ./configure --prefix=$HOME/python3.6.5 --enable-shared --enable-loadable-sqlite-extensions[python_env@python ~]$ make && make install(2)、装置实现后解决找不到libpython3.6m.so.1.0的问题[python_env@python ~]$ $HOME/python3.6.5/bin/python3/home/python_env/python3.6.5/bin/python3: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory[python_env@python ~]$ echo "export LD_LIBRARY_PATH=\"$HOME/python3.6.5/lib:\$LD_LIBRARY_PATH\"" >> $HOME/.bashrc[python_env@python ~]$ echo "export PATH=\"$HOME/python3.6.5/bin:\$PATH\"" >> $HOME/.bashrc[python_env@python ~]$ source $HOME/.bashrc[python_env@python ~]$ $HOME/python3.6.5/bin/python3Python 3.6.5 (default, Jan 6 2022, 15:53:24) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linuxType "help", "copyright", "credits" or "license" for more information.(3)、通过创立软链接替换以前的python环境[python_env@python ~]$ pip -Vbash: pip: command not found...[python_env@python ~]$ python -VPython 2.7.5[python_env@python ~]$ ln -s $HOME/python3.6.5/bin/python3 $HOME/python3.6.5/bin/python[python_env@python ~]$ ln -s $HOME/python3.6.5/bin/pip3 $HOME/python3.6.5/bin/pip[python_env@python ~]$ pip -Vpip 9.0.3 from /home/python_env/python3.6.5/lib/python3.6/site-packages (python 3.6)[python_env@python ~]$ python -VPython 3.6.5装置python虚拟环境# 创立在以后门路下[python_env@python ~]$ python -m venv <虚拟环境名称># 创立在其余门路下,请留神权限问题,仅可在以后用户下的任意门路创立[python_env@python ~]$ python -m venv <绝对路径>/<虚拟环境名称>

April 8, 2023 · 1 min · jiezi

关于python:新版Python-分布式爬虫与-JS-逆向进阶实战吾爱分xiang

(新版)Python 分布式爬虫与 JS 逆向进阶实战download:https://www.sisuoit.com/3838.html Python分布式爬虫是指应用多台计算机同时爬取网页内容,并将数据合并到一个数据库中。这种办法能够大大提高爬虫效率和速度。在本文中,咱们将探讨Python分布式爬虫的基本原理,以及如何应用Python编写分布式爬虫程序。 一、分布式爬虫的原理传统的单机爬虫在爬取大量数据时会受到带宽、CPU等因素的限度,影响爬虫的速度和效率。而分布式爬虫则能够通过将任务分配到多台计算机上,同时进行数据的爬取和解决,从而进步爬虫的效率和速度。分布式爬虫通常由爬虫节点、调度节点和数据节点组成,其中: 爬虫节点:负责爬取数据,并将数据传输到调度节点。调度节点:负责调度工作、治理节点和数据,以及将任务分配给各个爬虫节点。数据节点:存储爬取的数据,并将数据传输到数据中心。二、Python分布式爬虫的实现Python作为一种高级编程语言,有着丰盛的网络爬虫库和分布式计算框架,使得编写Python分布式爬虫程序变得更加简略和不便。 应用Scrapy分布式爬虫框架Scrapy是一款基于Python的高级爬虫框架,能够不便地实现分布式爬虫。它反对多线程、多过程、分布式等爬虫形式,能够疾速、稳固地爬取数据,并反对多种数据存储形式。 应用Redis分布式队列Redis是一款高性能的键值存储数据库,也是一种罕用的分布式队列,能够用来实现分布式爬虫的任务调度和节点通信。通过应用Redis分布式队列,能够实现多个爬虫节点之间的任务分配和数据传输。 应用Celery分布式工作队列Celery是一款Python分布式工作队列,能够不便地实现工作的异步解决和散布式调度。它反对多个爬虫节点之间的任务分配和数据传输,能够疾速、稳固地爬取数据,并反对多种数据存储形式。 三、总结Python分布式爬虫是一种高效、疾速的爬虫形式,能够进步爬虫的效率和速度。应用Scrapy、Redis、Celery等工具,能够轻松实现Python分布式爬虫程序,疾速、稳固地爬取数据,并反对多种数据存储形式。对于须要大规模爬取

April 7, 2023 · 1 min · jiezi

关于python:调优-mybatis-saveBatch-25倍性能

你好,我是yes。最近在压测一批接口,发现接口处理速度慢的有点超出预期,感觉很奇怪,前面定位发现是数据库批量保留这块很慢。这个我的项目用的是 mybatis-plus,批量保留间接用的是 mybatis-plus 提供的 saveBatch。我点进去看了下源码,感觉有点不太对劲: 我持续追踪了下,从这个代码来看,的确是 for 循环一条一条执行了 sqlSession.insert,上面的 consumer 执行的就是下面的 sqlSession.insert: 而后累计肯定数量后,一批 flush。从这点来看,这个 saveBach 的性能必定比间接一条一条 insert 快。我间接进行一个粗略的试验,简略创立了一张表来比照一波!粗略的试验 1000条数据,一条一条插入 @Testvoid MybatisPlusSaveOne() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { StopWatch stopWatch = new StopWatch(); stopWatch.start("mybatis plus save one"); for (int i = 0; i < 1000; i++) { OpenTest openTest = new OpenTest(); openTest.setA("a" + i); openTest.setB("b" + i); openTest.setC("c" + i); openTest.setD("d" + i); openTest.setE("e" + i); openTest.setF("f" + i); openTest.setG("g" + i); openTest.setH("h" + i); openTest.setI("i" + i); openTest.setJ("j" + i); openTest.setK("k" + i); //一条一条插入 openTestService.save(openTest); } sqlSession.commit(); stopWatch.stop(); log.info("mybatis plus save one:" + stopWatch.getTotalTimeMillis()); } finally { sqlSession.close(); }}复制代码 ...

April 7, 2023 · 3 min · jiezi