热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python解析cdata(python解析html标签)

本文目录一览:1、如何用Python输出漂亮的xml文件

本文目录一览:


  • 1、如何用Python输出漂亮的xml文件


  • 2、python解析CData


  • 3、python3.0怎么用json从文件解析


  • 4、求助:python如何按位解析二进制数据

如何用Python输出漂亮的xml文件

最近要用Python处理一个xml文件。平时习惯了用xml.etree.ElementTree,结果发现此库存在一些让人无法忍受的缺点:

1. 无法处理comment和cdata

2. 输出后的xml文件没有换行,没有缩进,十分难以阅读

于是尝试这用xml.dom.minidom,前两个问题几乎全部解决了。唯一让人看着不爽的是minidom对于text的处理。比如,我期待的xml输入如下:

[html] view plain copy

pre name="code" class="html"pre name="code" class="html"root

host192.168.0.1/host

/root

但是使用xml.dom.minidom.Document.writexml后,输出的结果却是这样的:

[html] view plain copy

root

host

192.168.0.1

/host

/root

开始的时候,我考虑重写Document.writexml函数,觉得太麻烦,有用牛刀杀鸡之感。后来想想,其实自己的需求非常简单,只是需要对Document的输出结果做个二次处理即可。使用python的正则表达式库就可以实现:

[python] view plain copy

def save_xml(self, file_name):

xml_str = self.m_dom.toprettyxml(indent=" ")

repl = lambda x: "%s/" % x.group(1).strip() if len(x.group(1).strip()) != 0 else x.group(0)

pretty_str = re.sub(r'\n\s*([^]+)/', repl, xml_str)

open(file_name, 'w').write(pretty_str)

先将Document输出到字符串,然后使用正则表达式将text中的空行去掉即可。

黑马程序员的PYthon是国内最早开设的真正人工智能课程。课程全面系统,紧跟时代潮流。

python解析CData

亲,python爬虫的解析框架的我也把握不准,我都是用re里面的正则表达式的匹配

myItems = re.findall('a class="breadInfo" href="board.jsp(.*?)/a',unicodePage,re.S)

myItems里面的内容是(.*?)所匹配到的,如果你的这个what,thefuck,你可以写成myItems = re.findall('!CDATA[[d(。*?)/d]],所以for i in myItems :

print i 就会得到What,the fuck!

python3.0怎么用json从文件解析

1、说明:

python3通过json模块load函数来解析文件。

2、代码示例:

首先编写一个json文件j.txt,内容如下:

{"errno":1,"errmsg":"操作成功!","data":[]}

python代码如下:

import json

with open('j.txt', 'r') as fr:

    o = json.load(fr)

    print(o['errno'])

    print(o['errmsg'])

    print(len(o['data']))

输出如下:

1

操作成功!

3、函数说明:

load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_cOnstant=None, object_pairs_hook=None, **kw)

反序列化fp(一个.read()包含 - 支持类文件对象一个JSON文件),以一个Python对象。

object_hook是将与被调用的可选功能任何对象文本解码(一个``dict``)的结果。返回值object_hook将用来代替dict。此功能可用于实现自定义解码器(例如JSON-RPC级提示)。

object_pairs_hook是将与被调用的可选功能任何对象的结果与对的有序列表字面解码。该的返回值object_pairs_hook将用来代替dict。

此功能可用于实现依赖于定制解码器命令该键和值对被解码(例如,collections.OrderedDict会记得插入的顺序)。如果object_hook也定义了object_pairs_hook优先。

要使用自定义JSONDecoder子类,与cls指定它kwarg;否则JSONDecoder使用。

4、其它说明:

也可以使用json.loads函数来直接处理字符串,方法如下:

o=json.loads('{"errno":0,"errmsg":"操作成功!","data":[]}')

求助:python如何按位解析二进制数据

可以的,二进制是计算机内的表示方法,处理二进制数据是最基本的能力。

如果是二进制字符串转十进制:

 x = '10101010'

 int(x, 2)

170

如果是从文件或网络中获取的数据,要知道某一位是0还是1的话,获取的数据可以按字符读取,由于一个字符由8位二进制表示,分别读取1到8位的二进制值就可以了:

 get_char_bit = lambda char, n: (char  (8-n))  1 # 从高到低分别为第1~8位

 data = b'ab' # 在python3中字符串默认是unicode,所以加上b前缀兼容

 # 在python3中按字符读取byte字符串是数字,而python2读出来的却是字符,但bytearray是一致的都是数字

 data = bytearray(data)

 result = []

 for char in data:

        for i in range(1, 9):

            result.append(get_char_bit(char, i)) 

 result

[0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]

还有一种比较简单的方法是使用内置的bin函数

 data = bytearray(b'ab')

 result = []

 for char in data:

        result.extend(bin(char)[2:].rjust(8, '0'))

        

 result

['0', '1', '1', '0', '0', '0', '0', '1', '0', '1', '1', '0', '0', '0', '1', '0']


推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有