Other

python-字典列表嵌套的排序

排序函数 使用排序有两个可用方法,分别是sort()和sorted()  sort():内置方法,会改变原来列表的的排序、只适用于列表排序、所以效率高  sorted():全局,可迭代任意对象(字符串、元祖、列表、字典等) sort()示例 简单的列表排序 L = [4,5,2,6,7,0,1,8] L.sort() print(L) 运行结果: [0, 1, 2, 4, 5, 6, 7, 8] 列表嵌套列表排序 user = [['Jone','183','22'],['Lily','165','60'],['Jack','179','59']] user.sort(key=lambda user:user[2]) print(user) 运行结果: [['Jone', '183', '22'], ['Jack', '179', '59'], ['Lily', '165', '60']] sorted()示例 字符串 A = 'Python' print(sorted(A,reverse=False)) print(sorted(A,reverse=True)) 运行结果: ['P', 'h', 'n', 'o', 't', 'y'] ['y', 't', 'o', 'n', 'h', 'P'] 元祖 B = (5,6,2,3,1,9,7) print(sorted(B,reverse=False)) print(sorted(B,reverse=True)) 运行结果: [1, 2, 3, 5, 6, 7, 9] [9, 7, 6, 5, 3, 2, 1] 列表

自动化测试之获取mysql中的数据

各位小伙伴们,大家好,今天给大家带来的是关自动化测试之获取mysql数据库中的数据方面的干货,技术含金量超高,有测开方面发展的小伙伴可以好好看看。  实施自动化获取mysql数据库中的数据的前提知识有: 1. 精通软件测试通用理论知识 2. 精通自动化测试编程语言python 3. 精通mysql数据库,懂sql语句 4. 精通python连接mysql数据库的知识 下面链接都有: http://it.qfedu.com/oa.php/Public/share?c2lkPTEwOTM=  需要搭建的环境有 1. 安装mysql数据库 2. 数据库中有储存数据的表格 3. 安装python 4. 安装pycharm(写代码的ide) 5. 安装selenium 6. 安装pymysql 首先我们设定场景来说明自动化获取mysql数据库中的数据,比如注册模块是A测试员进行测试的,他测试的时候把很多用户名和密码都储存到了数据库中,我们是测试登录模块的,需要获取这些用户名和对应的密码来进行登录测试。 如果你精通mysql数据库,就应该知道,用户的注册信息肯定是储存在一张用户信息表中,这个用户信息表里一定有用户当时注册时的用户名和密码,我们只要获取这些用户名和密码,然后拿到这些用户名和对应的密码来进行登录测试就可以。  核心技术点有以下几点: 1. 怎么使用python连接mysql数据库,并从数据库获取数据 2. 对应的sql语句怎么写 3. 这些数据储存到什么容器 4. 自动化测试登录中怎么使用这些数据 5. 自动化测试登录的代码编写  首先看第1点,python从mysql数据库中获取数据,具体的步骤如: 1. 引入pymysql 2. 连接数据库 3. 创建游标对象 4. 查看一下所在数据库(如果不在,需要切换数据库) 5. 获取数据 6. 关闭数据库 上面需要注意的是,必须先下载pymysql模块  第2点,sql语句有: 1. select *from user 第3点,使用列表来储存数据 完整代码如下: #1.引入pymysqlimport pymysql#2.连接数据库mydb=pymysql.connect(host='localhost',port=3306,user='root',passwd='123456',db='qftestdb',charset='utf8')#3..创建游标对象cur=mydb.cursor()#4.查看所在的数据库cur.execute(select DATABASE())data=cur.fetchone()print(data)#5.获取数据str=select *from usercur.execute(str)data=cur.fetchone()print(data)#这里就是获取的数据#6.关闭数据库mydb.close() 接下来编写自动化登录的代码,比如自动化登录  里面的send_keys中的数据就可以使用我们从数据库获取的数据了。直接把jenkings替换位data[0],123456替换位data[1].

PHPstorm出现问题

前几天收拾电脑,把许多不经常使用的软件删了。如何导致了我的phpstorm直接不能使用了。 找了半天,问题如下。   在网上找了半天,解决方法如下。 安装了Microsoft Visual C++ 2015后,点击刷新,然后就没有问题了。 没错就是一个驱动,它当时是和一个被我删掉的软件在一起的,。 这告诉了我们没事别瞎清理电脑。。。。

C#Socket网络编程(三) UDP服务器端和客户端连接

Socket(套接字)编程(Udp) 基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低。至于可靠性,可通过 应用层的控制来满足。(不可靠连接) (1).建立一个套接字(Socket) (2).绑定服务器端IP地址及端口号--服务器端 (3).通过SendTo()方法向指定主机发送消息 (需提供主机IP地址及端口) (4).通过ReciveFrom()方法接收指定主机发送的消息 (需提供主机IP地址及端口) TCP和UDP的区别TCP协议和UDP协议连接过程的区别1.基于连接与无连接;2.对系统资源的要求(TCP较多,UDP少);3.UDP程序结构较简单;4.流模式与数据报模式 ;5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。 UDP服务器端: 1 using System; 2 using System.Net; 3 using System.Net.Sockets; 4 using System.Text; 5 6 namespace _29_UDP服务器端 7 { 8 internal class Program 9 { 10 static void Main(string[] args) 11 { 12 13 Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 14 15 IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 31, 17 }); 16 // IP + Port 17 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 7788); 18 19 udpServer.

基于正则表达式的Java爬虫项目

需求分析:抓取新闻网前100条新闻标题以及对应的网页新闻的链接  编者这里以齐鲁工业大学校园新闻网为示例,利用Java网络编程、多线程、正则表达式来实现对于新闻内容的抓取。(注:由于校园网限制,不连接齐鲁工业大学校园网可能暂时无法抓取全部内容或抓取的内容会存在缺失是正常情况) 源代码示例: import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.regex.Matcher; import java.util.regex.Pattern; public class NetUrl { //网络爬虫 //1、向页面发送请求 //2、获取页面html---纯文本 //3、解析要的内容---rege、xml、jsoup、json //reg 字面量、字符类、数量?+ * public static void testUrl () { try { // private Lock lock=new ReentrantLock(); // for (int j = 1; j <= 100; j++) { //// StringBuffer sb0=new StringBuffer(); //// sb0.append(http://www.qlu.edu.cn/gdyw/list+j+.htm); String content = https://www.qlu.edu.cn/gdyw/list + j + .

postgresql基础

一、建立数据库连接 ----------------接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 数据库名 连接本机数据库:psql -U postgres 切换用户名:\c - 用户名  二、访问数据库 1、列举数据库:\l 2、选择数据库:\c 数据库名 3、查看该某个库中的所有表:\dt 4、查看某个库中的某个表结构:\d 表名 5、退出psgl:\q  三、SQL语句 创建数据库 create database [数据库名]; 删除数据库 drop database [数据库名]; 创建表 create table (字段名1,字段名2,......<,primary key (字段名m,字段名n,...)>;); 在表中插入数据 insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......); 显示表内容 select * from student; 重命名一个表 alter table [表名A] rename to [表名B]; 删除一个表 drop table [表名]; 在已有的表里添加字段 alter table [表名] add column [字段名]; 删除表中的字段

MySQL索引原理

索引目的 索引的目的在于提高查询效率,可以类比字典索引。 索引原理 通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件 数据库实现比较复杂,数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为访问磁盘的成本大概是访问内存的十万倍左右 磁盘IO与预读 磁盘IO 磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为寻道时间、旋转延迟、传输时间三个部分,寻道时间指的是磁臂移动到指定磁道所需要的时间,主流磁盘一般在5ms以下;旋转延迟就是我们经常听说的磁盘转速,比如一个磁盘7200转,表示每分钟能转7200次,也就是说1秒钟能转120次,旋转延迟就是1/120/2 = 4.17ms;传输时间指的是从磁盘读出或将数据写入磁盘的时间,一般在零点几毫秒,相对于前两个时间可以忽略不计。那么访问一次磁盘的时间,即一次磁盘IO的时间约等于5+4.17 = 9ms左右,听起来还挺不错的,但要知道一台500 -MIPS的机器每秒可以执行5亿条指令,因为指令依靠的是电的性质,换句话说执行一次IO的时间可以执行40万条指令,数据库动辄十万百万乃至千万级数据,每次9毫秒的时间,显然是个灾难。下图是计算机硬件延迟的对比图,供大家参考: 磁盘预读 考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,这个理论对于索引的数据结构设计非常有帮助。 索引的数据结构 B+ 树的所有的叶子节点之间会通过双向指针串联在一起,构成一个双向链表 B+ 树的中间节点不会存储数据指针,而只有叶子节点才会存储,中间节点只用于存储到叶子节点的路由信息 3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO(每层一次),性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。 IO次数取决于b+树的高度h,假设当前数据表的数据为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度越低。这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。当数据项等于1时将会退化成线性表。 当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。

SQL语言基础

数据库语言是java项目开发必不可少的一部分。就我目前的理解:它这不就是高级Excel嘛?诚然,它的设计理论、流程比较复杂。对于关系型数据库如何工作的往后再谈。 0、复习内容 SQL语法基础 SQL语句进阶 1、SQL语法基础 1.1 基础 主键的值不允许修改,也不可复用 SQL语句不区分大小写(但是数据库表名、列名和值是否区分依赖于具体的DBMS以及配置) 三种注释方法:#、--、/*注释1*/ 数据库创建与使用 CREATE DATABASE test; USE test; 1.2 创建表 CREATE TABLE myFirstTable( id INT NOT NULL AUTO_INCREMENT, #NOT NULL非空,后接限定值 col INT NOT NULL DEFAULT 1, col2 VARCHAR(45) NULL, col3 DATE NULL, PRIMARY KEY(`id`)); 1.3 修改表 -- 添加列 ALTER TABLE myFirstTable ADD col4 CHAR(20) AFTER col; # 在col后添加col4 -- 删除列 ALTER TABLE myFirstTable DROP COLUMN col4; -- 删除表 DROP TABLE myFirstTable; 1.

centos7防火墙开放端口

在 Centos 7 或 RHEL 7 或 Fedora 中防火墙由 firewalld 来管理,而不是 iptables。 一、firewalld 防火墙 语法命令如下:启用区域端口和协议组合 firewall-cmd [--zone=] --add-port=[-]/ [--timeout=] 此举将启用端口和协议的组合。 端口可以是一个单独的端口 或者是一个端口范围 -。 协议可以是 tcp 或 udp。 查看 firewalld 状态 systemctl status firewalld 开启 firewalld systemctl start firewalld 开放端口 // --permanent 永久生效,没有此参数重启后失效 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent 重新载入 firewall-cmd --reload 查看 firewall-cmd --list-ports firewall-cmd --zone=public --query-port=80/tcp 删除 firewall-cmd --zone=public --remove-port=80/tcp --permanent 二、iptables 防火墙 也可以还原传统的管理方式使用 iptables systemctl stop firewalld