一、xml模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,

xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

什么是XML?

XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。XML不是为了方便阅读而设计,而是为了编码为数据。

标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成 XML。XML有以下几个特点。

  • XML的设计宗旨是传输数据,而非显示数据。

  • XML标签没有被预定义。您需要自行定义标签。

  • XML被设计为具有自我描述性。

  • XML是W3C的推荐标准。

xml常见用途

(1) 数据传送通用格式

(2)配置文件

(3) 充当小型数据库

目前,XML在Web中起到的作用不会亚于一直作为Web基石的HTML。 XML无所不在。XML是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。

因此,学会如何解析XML文件,对于Web开发来说是十分重要的。

有哪些可以解析XML的Python包?

Python的标准库中,提供了6种可以用于处理XML的包。

xml.dom 、xml.dom.minidom、xml.dom.pulldom、xml.sax、xml.parser.expat、xml.etree.ElementTree(以下简称ET)

利用ElementTree解析XML

Python标准库中,提供了ET的两种实现。一个是纯Python实现的xml.etree.ElementTree,另一个是速度更快的C语言实现xml.etree.cElementTree。请记住始终使用C语言实现,因为它的速度要快很多,而且内存消耗也要少很多。如果你所使用的Python版本中没有cElementTree所需的加速模块,你可以这样导入模块:

  try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET

  

如果某个API存在不同的实现,上面是常见的导入方式。当然,很可能你直接导入第一个模块时,并不会出现问题。请注意,自Python 3.3之后,就不用采用上面的导入方法,因为ElemenTree模块会自动优先使用C加速器,如果不存在C实现,则会使用Python实现。

因此,使用Python 3.3+的朋友,只需要import xml.etree.ElementTree即可。

将XML文档解析为树(tree)

XML是一种结构化、层级化的数据格式,最适合体现XML的数据结构就是树。ET提供了两个对象:ElementTree将整个XML文档转化为树,Element则代表着树上的单个节点。对整个XML文档的交互(读取,写入,查找需要的元素),一般是在ElementTree层面进行的。对单个XML元素及其子元素,则是在Element层面进行的。

ElementTree表示整个XML节点树,而Element表示节点数中的一个单独的节点。

ET 模块可以归纳为三个部分:ElementTree类,Element类以及一些操作 XML 的函数。

在面向对象的编程语言中,我们需要定义几个类来表示这个树形结构的组成部分。分析这个树形结构我们发现其实每个节点(指的是上图中的每个圆形,对应XML中的每个标签对)都可以抽象为一个共同的类,比如叫Leaf(叶子)、Node(节点)、Element都可以。但是,除了表示节点的类,我们还需要定义一个类来表示这个树本身。ET(xml.etree.ElementTree)中就设计了以下几个类:

  • ElementTree: 表示整个XML层级结构

  • Element: 表示树形结构中所有的父节点

  • SubElement: 表示树形结构中所有的子节点

有些节点既是父节点,又是子节点

Xml语法

入门案例: 用xml来记录一个班级信息

  <?xml version="1.0" encoding="utf-8"?><xml-body><class><stu id="001"><name>杨过</name><sex>男</sex><age>30</age></stu><stu id="002"><name>李莫愁</name><sex>女</sex><age>20</age></stu></class></xml-body>

  

用encoding属性说明文档的字符编码:<?xml version="1.0" encoding="GB2312" ?>

  当XML文件中有中文时,必须使用encoding属性指明文档的字符编码,例如:encoding="GB2312"或者encoding="utf-8",并且在保存文件时,也要以相应的文件编码来保存,否则在使用浏览器解析XML文件时,就会出现解析错误的情况。

(1) 文档声明

<?xml version=”1.0” encoding=”编码方式” standalone=”yes|no”?>

XML声明放在XML文档的第一行

XML声明由以下几个部分组成:

version - -文档符合XML1.0规范,我们学习1.0

encoding - -文档字符编码,比如”gb2312”

standalone - -文档定义是否独立使用

standalone="yes“

standalone=“no” 默认

(2) 一个xml 文档中,有且只有一个根元素(元素标签节点)

(3) 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的:

  
  <name>xiaoming</name>

  

不等价与

  
  <name>xiaoming</name>

  

由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,要特别注意。

(4) 属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔),一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值">

特定的属性名称在同一个元素标记中只能出现一次,属性值能包括<, >, &

  
  <?xml version="1.0" encoding="utf-8"?><xml-body><class><stu id="a"0'0'1"><name>杨过</name><sex>男</sex><age>30</age></stu><stu id="002"><name>李莫愁</name><sex>女</sex><age>20</age></stu></class></xml-body>

  

实际效果

一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:

  • 区分大小写,例如,<P>和<p>是两个不同的标记。

  • 不能以数字或"_" (下划线)开头。

  • 不能包含空格。

  • 名称中间不能包含冒号(:)。

(5)xml语法——元素

  XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:

  • - 包含标签体:<a>www.cnblogs.com/</a>- 不含标签体的:<a></a>, 简写为:<a/>

  一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:

    错误的写法:<a>welcome to <b>www.cnblogs.com/</a></b>

  格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。

(6)XML语法——属性

  一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如: <input name=“text”> ,属性值一定要用双引号(")或单引号(')引起来,定义属性必须遵循与标签相同的命名规范 。

  多学一招:**在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述**,例如:

  
<input><name>text</name>
</input>

  

例子

  
  <?xml version="1.0"?><data><country name="Liechtenstein">    #country 元素名, name =""是元素的名称<rank updated="yes">2</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank updated="yes">5</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank updated="yes">69</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data>

  

在python中的操作

xml文件:文件名"testxml.xml",内容如下:

  <?xml version="1.0"?><data><country name="Liechtenstein"><rank updated="yes">2</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank updated="yes">5</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank updated="yes">69</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data>

  

python中的操作

  import xml.etree.ElementTree as ET​tree = ET.parse("testxml.xml")  #.parse解析,ET的解析方法root = tree.getroot()print(root.tag)

  

ElementTree.parse(source, parser=None),将xml文件加载并返回ElementTree对象。parser是一个可选的参数,如果为空,则默认使用标准的XMLParser解析器。

ElementTree.getroot(),得到根节点。返回根节点的element对象。根元素(root)是一个Element对象。

Element.remove(tag),删除root下名称为tag的子节点 以下函数,ElementTree和Element的对象都包含。

访问Element对象的标签、属性和值

  
  tag = element.tag   #标签attrib = element.attrib #属性value = element.text  #值、内容

  

例子

  
  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​# 遍历根节点,获取根节点的子对象for i in root:print(i) #这里获取的是根节点的子对象print(i.tag) #用tag方法获取节点的标签

  

输出结果

  
  <Element 'country' at 0x027A4F90>country<Element 'country' at 0x027AC120>country<Element 'country' at 0x027AC240>country

  

遍历根节点

例子

  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​# 遍历根节点,获取根节点的子对象for i in root:print(i.attrib) #获取子对象的属性

  

输出结果

  
  {'name': 'Liechtenstein'}{'name': 'Singapore'}{'name': 'Panama'}

  

例子

  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​# 遍历根节点,获取根节点的子对象for i in root:for j in i:print(j.attrib) #获取SubElement对象的属性

  

输出结果

  
  {'updated': 'yes'}{}{}{'name': 'Austria', 'direction': 'E'}{'name': 'Switzerland', 'direction': 'W'}{'updated': 'yes'}{}{}{'name': 'Malaysia', 'direction': 'N'}{'updated': 'yes'}{}{}{'name': 'Costa Rica', 'direction': 'W'}{'name': 'Colombia', 'direction': 'E'}​

  

root.iter()迭代

例子

  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​# root.iter()迭代# Element元素迭代子元素,Element.iter("tag"),即罗列该节点下所包含的所有子节点​#罗列出所有节点的下面包含year元素的内容for i in root.iter("year"):print(i.tag,i.text)

  

输出结果

  year 2008year 2011year 2011

  

element.findall()、element.find()


  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​# Element.findall("tag"):查找当前元素为“tag”的直接子元素#findall只能用来查找直接子元素,不能用来查找rank,neighbor等element​for country in root.findall('country'): #查询当前元素的子元素rank = country.find('rank').text  #查询指定标签的第一个子元素,element.text获取元素的内容year = country.find('year').textneig = country.find('neighbor').attribname  = country.get("name")  #element.get()获取元素的属性值print(rank,year,neig,name)

  

 

输出结果

  
  2 2008 {'name': 'Austria', 'direction': 'E'} Liechtenstein5 2011 {'name': 'Malaysia', 'direction': 'N'} Singapore69 2011 {'name': 'Costa Rica', 'direction': 'W'} Panama

  

修改xml文件:

element.set()修改属性,element.remove()删除元素

  • ElementTree.write("xmlfile"):更新xml文件

  • Element.append():为当前element对象添加子元素(element)

  • Element.set(key,value):为当前element的key属性设置value值

  • Element.remove(element):删除为element的节点

例子

xml文件:文件名"testxml.xml",内容如下:

  
  <?xml version="1.0"?><data><country name="Liechtenstein"><rank updated="yes">2</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank updated="yes">5</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank updated="yes">69</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data>

  

python操作

element.set()修改属性

  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​for rank in root.iter("rank"):new_rank = int(rank.text) + 1  #这里的是一个rank子元素对象rank.text = str(new_rank)rank.set("updated","yes") #修改rank的属性​tree.write("testxml.xml") #将修改写入文件

  

输出结果

element.remove()删除元素

  
  import xml.etree.ElementTree as ETtree = ET.parse("testxml.xml")root = tree.getroot()​for country in root.findall('country'):rank = int(country.find('rank').text)if rank>50:root.remove(country)tree.write('test.xml')

  

例子

test.xml 原文件内容

 <root><sub1 name="name attribute" /><sub2>test</sub2></root>

  

python文件

  
  import xml.etree.ElementTree as ET​#读取待修改文件updateTree = ET.parse("test.xml")root = updateTree.getroot()#创建新节点并添加为root的子节点newEle = ET.Element("NewElement")newEle.attrib = {"name":"NewElement","age":"20"}newEle.text = "This is a new element"root.append(newEle)​#修改sub1的name属性sub1 = root.find("sub1")sub1.set("name","New Name")​#修改sub2的数据值sub2 = root.find("sub2")sub2.text = "New Value"​#写回原文件updateTree.write("test.xml")​#打印生成的格式ET.dump(updateTree)

  

输出结果

  
  <root><sub1 name="New Name" /><sub2>New Value</sub2><NewElement age="20" name="NewElement">This is a new element</NewElement></root>

  

创建xml文件

  
  import xml.etree.ElementTree as ET​#创建根节点a = ET.Element("root")​#创建子节点,并添加属性b = ET.SubElement(a,"sub1")b.attrib = {"name":"name attribute"}​#创建子节点,并添加数据c = ET.SubElement(a,"sub2")c.text = "test"​#创建elementtree对象,写文件tree = ET.ElementTree(a)tree.write("test.xml")

  

输出结果

  <root><sub1 name="name attribute" /><sub2>test</sub2></root>

  

二、datetime模块

datetime模块

datatime模块重新封装了time模块,提供更多接口,

相比于time模块,datetime模块的接口则更直观、更容易调用

datetime模块定义了下面这几个类:

  • datetime.date:表示日期的类。常用的属性有year, month, day;

  • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;

  • datetime.datetime:表示日期时间。

  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。

  • datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)

1、date类

datetime.date(year, month, day)

静态方法和字段
  date.max、date.min                :date对象所能表示的最大、最小日期;date.resolution                   :date对象表示日期的最小单位。这里是天。date.today()                      :返回一个表示当前本地日期的date对象;date.fromtimestamp(timestamp)     :根据给定的时间戮,返回一个date对象;

  

例子

  import datetimeimport timeprint(datetime.date.max)print(datetime.date.min)print(datetime.date.resolution)print(datetime.date.today())print(datetime.date.fromtimestamp(time.time()))

  

输出结果

  
  9999-12-310001-01-011 day, 0:00:002018-05-222018-05-22

  

date类方法和属性
  d1.year、date.month、date.day:年、月、日;d1.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)d1.timetuple():返回日期对应的time.struct_time对象;d1.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;d1.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;d1.isocalendar():返回格式如(year,month,day)的元组;d1.isoformat():返回格式如'YYYY-MM-DD’的字符串;d1.strftime(fmt):和time模块format相同。

  

例子

  import datetimed1 = datetime.date(year=2018,month=5,day=1)   #date对象d2 = datetime.date(2018,2,3)​print(d1.year,d1.month)print(d1.replace(2017,3,1))   #生成一个新的日期对象,原有对象仍保持不变print(d1.timetuple())  #返回结构化时间print(d1.weekday())    #返回是一周星期几的数字,从周一/0开始,周一是0print(d1.isoweekday()) #返回是一周星期几的数字,从周一/1开始,周一是1print(d1.isocalendar()) #返回格式如(year,month,day)的元组时间;print(d1.isoformat())  #返回格式如'YYYY-MM-DD’的字符串时间;print(d1.strftime("%Y--%m--%d")) #设置时间格式,和time模块format相同。print(datetime.date.fromtimestamp(128322222)) # 把一个时间戳转为datetime日期类型

  

输出结果

  
  2018 52017-03-01time.struct_time(tm_year=2018, tm_mon=5, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=121, tm_isdst=-1)12(2018, 18, 2)2018-05-012018--05--011974-01-25

  

2、time类

datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )

静态方法和字段
time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);time.resolution:时间的最小单位,这里是1微秒;

例子

  
  import datetimeprint(datetime.time.max)print(datetime.time.min)print(datetime.time.resolution)

  

输出结果

  
  23:59:59.99999900:00:000:00:00.000001

  

方法和属性

例子

  import datetime​t1 = datetime.time(23,12,52,90)t2 = datetime.time(hour=23,minute=12,second=52,microsecond=90)print(t1)              #返回时间print(t1.hour)         #返回对象的小时数值print(t1.minute)       #返回对象的分钟数值print(t1.second)       #返回对象的秒数值print(t1.microsecond)  #返回对象的毫秒数值print(t1.tzinfo)       #返回对象的时区信息print(t1.replace(20,10,7,888))   #创建一个新的时间对象,用参数指定的时、分、秒、微秒# 代替原有对象中的属性(原有对象仍保持不变)print(t1.isoformat())            #返回型如"HH:MM:SS"格式的字符串表示print(t1.strftime("%H--%M--%S"))  #设置显示的时间格式,同time模块中的format;

  

输出结果

  
  23:12:52.00009023125290None20:10:07.00088823:12:52.00009023--12--52

  

3、datetime类

datetime相当于date和time结合起来。datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

静态方法和字段
  datetime.max 返回datetime类能表示的最大时间datetime.min 返回datetime类能表示的最小时间datetime.today():返回一个表示当前本地时间的datetime对象;datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;datetime.combine(date, time):根据date和time,创建一个datetime对象;datetime.strptime(date_string, format):由日期格式转化为字符串格式

例子

  import datetimeimport time​print(datetime.datetime.max)  # 返回datetime类能表示的最大时间print(datetime.datetime.min)  # 返回datetime类能表示的最小时间print(datetime.datetime.today())  #返回一个表示当前本地时间的datetime对象;print(datetime.datetime.now())    #返回一个表示当前本地时间的datetime对象print(datetime.datetime.utcnow())  #返回一个当前utc时间的datetime对象;#格林威治时间print(datetime.datetime.fromtimestamp(time.time())) #根据时间戮创建一个datetime对象,参数tz指定时区信息;print(datetime.datetime.utcfromtimestamp(time.time()))  #根据时间戮创建一个datetime对象;​d1 = datetime.date(2018,5,1)t1 = datetime.time(20,5,8,90)print(datetime.datetime.combine(d1,t1))  #根据date和time,创建一个datetime对象;​dt1= datetime.datetime(2018,5,1,20,8,11)print(datetime.datetime.strftime(dt1,"%Y-%m-%d %H:%M:%S"))  #由日期格式转化为字符串格式

  

输出结果

  
  9999-12-31 23:59:59.9999990001-01-01 00:00:002018-05-22 18:34:21.7971772018-05-22 18:34:21.7971772018-05-22 10:34:21.7971772018-05-22 18:34:21.7971772018-05-22 10:34:21.7971772018-05-22 10:34:21.7971772018-05-01 20:05:08.0000902018-05-01 20:08:11

  

方法和属性
  import datetime​dt = datetime.datetime.now()print(dt)print(dt.year)print(dt.month)print(dt.day)print(dt.hour)print(dt.minute)print(dt.second)print(dt.microsecond)print(dt.tzinfo)​print(dt.date())  #返回date对象print(dt.time())  #返回time对象print(dt.replace(2018,2,3,20,10,8,999))  #生成一个新的日期对象,原有对象仍保持不变print(dt.timetuple())        #返回结构化时间print(dt. utctimetuple ())   #返回格林尼治时区的的结构化时间print(dt. weekday ())        #返回是一周星期几的数字,从周一/0开始,周一是0print(dt. isocalendar ())    #返回格式如(year,month,day)的元组时间print(dt. isoformat ())     #返回型如"HH:MM:SS"格式的字符串表示print(dt. ctime ())          #返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));print(dt. strftime ("%Y--%m--%d %H:%M:%S")) #由日期格式转化为字符串格式

  

输出结果

  
  2018-05-22 19:51:33.4270912018522195133427091None2018-05-2219:51:33.4270912018-02-03 20:10:08.000999time.struct_time(tm_year=2018, tm_mon=5, tm_mday=22, tm_hour=19, tm_min=51, tm_sec=33, tm_wday=1, tm_yday=142, tm_isdst=-1)time.struct_time(tm_year=2018, tm_mon=5, tm_mday=22, tm_hour=19, tm_min=51, tm_sec=33, tm_wday=1, tm_yday=142, tm_isdst=0)1(2018, 21, 2)2018-05-22T19:51:33.427091Tue May 22 19:51:33 20182018--05--22 19:51:33

  

4、timedelta类,时间加减

使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

  import datetime​dt = datetime.datetime.now()#日期加一天dt1 = dt + datetime.timedelta(days=1)#日期减一天dt2 = dt - datetime.timedelta(days=1)print(dt1)print(dt2)#时间快进到5个小时后dt3 = dt + datetime.timedelta(hours=5)#时间返回到半小时前dt4 = dt - datetime.timedelta(minutes=30)print(dt3)print(dt4)

  

输出结果

  
  2018-05-23 20:04:35.3378142018-05-21 20:04:35.3378142018-05-23 01:04:35.3378142018-05-22 19:34:35.337814

  

参考资料

[1]http://developer.51cto.com/art/201602/505662.htm

[2]https://www.cnblogs.com/yaoyinglong/p/xml.html

[3]https://www.cnblogs.com/tkqasn/p/6001134.html

转载于:https://www.cnblogs.com/Nicholas0707/p/9073898.html

Python之路(第十六篇)xml模块、datetime模块相关推荐

  1. 【Python基础】第十六篇 | 面向对象之高级篇

    继承 1.继承描述的是类与类之间的关系 2.继承的好处:减少代码的冗余(相同的代码不需要多次重复书写),可以直接使用 语法: class A():# 没有写父类,但也有父类,object,,objec ...

  2. Python之路【第六篇】:Python运算符

    算术运算符 赋值运算符 比较运算符 逻辑运算符 成员运算符 算术运算符: + a+b - a-b* a*b或者是返回一个被重复若干次的字符串(比如2*'a'.'a'*2,返回aa)/ x/y% 取余* ...

  3. Python之路【第十六篇】:Django【基础篇】

    https://www.cnblogs.com/wupeiqi/articles/5237704.html Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django ...

  4. 喜迎四十万访问量,自荐十六篇好博文

    喜迎四十万访问量,自荐十六篇好博文 作者:赖勇浩(http://blog.csdn.net/lanphaday) 2008年12月8日本博的访问量一举突破 40 万大关,猛回头,发现已经在 CSDN ...

  5. java监听数据库操作_第十六篇——JDBC操作数据库之监听器

    JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...

  6. Python之路【第五篇】:面向对象及相关

    Python之路[第五篇]:面向对象及相关 Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance ...

  7. Python:利用python编程将上海十六区,2020年5月份房价实时地图(数据来源房天下)进行柱状图、热图可视化

    Python:利用python编程将上海十六区,2020年5月份房价实时地图(数据来源房天下)进行柱状图.热图可视化 目录 上海十六区,2020年5月份房价实时地图(数据来源房天下)可视化 雷达图.柱 ...

  8. 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

    本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/mo ...

  9. Python之路【第八篇】:堡垒机实例以及数据库操作

    Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于 ...

最新文章

  1. 增强的Internet域内网关路由协议
  2. arm-linux-gcc/ld/objcopy/objdump参数总结【转】
  3. 【视频课】完备理论+4大案例实践,一课深入掌握图像分类各个方向,配套导师永久答疑群...
  4. Go 中string和int类型相互转换
  5. (组合数学笔记)递推关系小结及典型题分析
  6. 由scanf说起之1:scanf函数和回车、空格 及其返回值
  7. 微型计算机音乐发生器,基于51单片机的音乐发生器的设计最终版(全文完整版)...
  8. php摇骰子源码,HTML5 掷骰子游戏 源码下载
  9. mac 中word去掉超链接
  10. C语言热电阻温度查表,热电阻分度表如何看?是什么意思?
  11. 餐厅扫码点餐怎么弄_分享扫码点餐小程序开发制作方法
  12. Introduction to BouncyCastle with Java
  13. java高性能rpc,企业级rpc,zk调度,负载均衡,泛化调用一体的rpc服务框架
  14. google之Thumbnails图片等比压缩,保持图片清晰
  15. win10专业版2020下载链接
  16. 新建UEFI启动分区
  17. 【MODIS数据处理#13】使用Arcpy一键加工长时间序列MODIS数据
  18. js手机端 下拉刷新
  19. Android修改默认屏幕亮度
  20. 拯救地球精英【逻辑题】

热门文章

  1. cad缺失字体补全工具_CAD图纸字体不全怎么办?只要修改字体映射表就可以轻松解决了...
  2. 全局变量,静态局部变量,局部变量空间的堆分配和栈分配问题
  3. 盘点下常用的接口测试工具,有几个你肯定没用过
  4. 测试工程师应懂的Python知识
  5. 性能进阶:使用JMeter进行websocket测试
  6. mysql双主启停_Mysql 多实例配置与启停
  7. centos 6.2安装mysql_centos6.2安装mysql
  8. Java中子程序输出到输出文件中_Fortran 90中子例程和函数中的参数/变量的INTENT的含义...
  9. 关于QT中奇数个汉字出现newline in constant的错误
  10. Lesson 4 Part 2 Softmax Regression