--import ConfigParser 模块------解析配置文件---------------------------------------------------------------------
test.conf内容:
[first]
w = 2
v: 3
c =11-3
[second]
sw=4
test: hello
测试配置文件中有两个区域,first和second,另外故意添加一些空格、换行。
>>> import ConfigParser
>>> conf=ConfigParser.ConfigParser()
>>> conf.read('test.conf')
['test.conf']
>>> conf.sections() #获得所有区域
['first', 'second']
>>> for sn in conf.sections():
... print conf.options(sn) #打印出每个区域的所有属性
...
['w', 'v', 'c']
['sw', 'test']
获得每个区域的属性值:
for sn in conf.sections():
print sn,'-->'
for attr in conf.options(sn):
print attr,'=',conf.get(sn,attr)
输出:
first -->
w = 2
v = 3
c = 11-3
second -->
sw = 4
test = hello
好了,以上就是基本的使用过程,下面是动态的写入配置,
cfd=open('test2.ini','w')
conf=ConfigParser.ConfigParser()
conf.add_section('test') #add a section
conf.set('test','run','false')
conf.set('test','set',1)
conf.write(cfd)
cfd.close()
上面是向test2.ini写入配置信息。
--********************************************************************************************************************************
--import------import html 模块------解析相关----------------------------------------------------------------------------
--********************************************************************************************************************************
HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析。
使用时需要定义一个从类HTMLParser继承的类,重定义函数:
handle_starttag( tag, attrs)
handle_startendtag( tag, attrs)
handle_endtag( tag)
来实现自己需要的功能。
tag是的html标签,attrs是 (属性,值)元组(tuple)的列表(list)。
HTMLParser自动将tag和attrs都转为小写。
下面给出的例子抽取了html中的所有链接: (在PYTHON3.3版本中)
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.links = []
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "a":
if len(attrs) == 0:
pass
else:
for (variable, value) in attrs:
if variable == "href":
self.links.append(value)
if __name__ == "__main__":
html_code = """ google.com PythonClub Sina """
hp = MyHTMLParser()
hp.feed(html_code)
hp.close()
print(hp.links)
运行结果为: ['www.google.com', 'www.pythonclub.org', 'www.sina.com.cn']
---------------------------------------------
显示HTML中标签之间的文字:
from html.parser import HTMLParser
page ='''''啊啊啊京东商城
乐淘网上鞋城 拉手团购 亚马逊 凡客诚品 世纪佳缘'''def handle_starttag(self,tag,attr):
注: 在eclipse中的pydev中调试,记得中文编码问题,在项目中右键改编码为utf-8
就要重定义 handle_startendtag( tag, attrs) 函数
handle_startendtag 处理开始标签和结束标签
handle_charref 处理特殊字符串,就是以开头的,一般是内码表示的字符
handle_entityref 处理一些特殊字符,以&开头的,比如
handle_pi 处理形如<?instruction>的东西
HTML操作是编程中很重要的一块,下面用Python3.x中的html.parser中的HTMLParser类来进行HTML的解析。
class html.parser.HTMLParser(*, convert_charrefs=True)
HTMLParser主要是用来解析HTML文件(包括HTML中无效的标记)
参数convert_charrefs表示是否将所有的字符引用自动转化为Unicode形式,Python3.5以后默认是True
HTMLParser.feed(data): 接收一个字符串类型的HTML内容,并进行解析
HTMLParser.close(): 当遇到文件结束标签后进行的处理方法。如果子类要复写该方法,需要首先调用HTMLParser累的close()
HTMLParser.reset():重置HTMLParser实例,该方法会丢掉未处理的html内容
HTMLParser.getpos(): 返回当前行和相应的偏移量
HTMLParser.handle_starttag(tag, attrs): 处理开始标签,比如 对开始标签的处理方法。例如
,参数tag指的是divHTMLParser.handle_data(data): 处理数据,就是data中间的那些数据 对标签之间的数据的处理方法。test,data指的是“test”
HTMLParser.handle_comment(data): 处理注释 对HTML中注释的处理方法。
待处理文件: http://files.cnblogs.com/files/AlwinXu/Scan_TFS.zip
from html.parser import HTMLParser
#定义HTMLParser的子类,用以复写HTMLParser中的方法
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
#覆盖handle_data方法,用来处理获取的html数据,这里保存在data数组
#读取本地html文件.(当然也可以用urllib.request中的urlopen来打开网页数据并读取,这里不做介绍)
htmlFile = open(r"/Users/xualvin/Downloads/TFS.htm",'r')
if item.startswith("{\"columns\""):
payloadDict = json.loads(item)
list = payloadDict["payload"]["rows"]
if backlog[1] == "Product Backlog Item" or backlog[1] == "Bug":
print(backlog[2]," Point: ",backlog[3])
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。
它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
python有3种方法解析XML,SAX,DOM,以及ElementTree: 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
--2--DOM(Document Object Model)--将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
--3--ElementTree(元素树)--ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
注: 因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
--python使用SAX解析xml--SAX是一种基于事件驱动的API。
利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。
解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;
而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。
在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。
从行开始,遇到标签之前,存在字符,content的值为这些字符串。
从一个标签,遇到下一个标签之前, 存在字符,content的值为这些字符串。
从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。
startElement(name, attrs)方法 遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。
endElement(name)方法 遇到XML结束标签时调用。
xml.sax.make_parser( [parser_list] )
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
contenthandler - 必须是一个ContentHandler的对象
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
parseString方法创建一个XML解析器并解析xml字符串:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
contenthandler - 必须是一个ContentHandler的对象
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
class MovieHandler( xml.sax.ContentHandler ):
def startElement(self, tag, attributes):
if self.CurrentData == "type":
elif self.CurrentData == "format":
elif self.CurrentData == "year":
elif self.CurrentData == "rating":
elif self.CurrentData == "stars":
elif self.CurrentData == "description":
print "Description:", self.description
def characters(self, content):
if self.CurrentData == "type":
elif self.CurrentData == "format":
elif self.CurrentData == "year":
elif self.CurrentData == "rating":
elif self.CurrentData == "stars":
elif self.CurrentData == "description":
parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
parser.setContentHandler( Handler )
Description: Talk about a US-Japan war
Description: A schientific fiction
Description: Vash the Stampede!
完整的 SAX API 文档请查阅Python SAX APIs
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
python中用xml.dom.minidom来解析xml文件,实例如下:
from xml.dom.minidom import parse
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
print "Root element : %s" % collection.getAttribute("shelf")
movies = collection.getElementsByTagName("movie")
if movie.hasAttribute("title"):
print "Title: %s" % movie.getAttribute("title")
type = movie.getElementsByTagName('type')[0]
print "Type: %s" % type.childNodes[0].data
format = movie.getElementsByTagName('format')[0]
print "Format: %s" % format.childNodes[0].data
rating = movie.getElementsByTagName('rating')[0]
print "Rating: %s" % rating.childNodes[0].data
description = movie.getElementsByTagName('description')[0]
print "Description: %s" % description.childNodes[0].data
Description: Talk about a US-Japan war
Description: A schientific fiction
Description: Vash the Stampede!
完整的 DOM API 文档请查阅Python DOM APIs。