Python3处理XML的笔记

应该说,Python(3)不愧其名,在各个方面都能够优雅地进行编程与处理数据。今天我来整理一下在Python3中处理XML的一些方法。

先注明:所提及的前两个库都是 Python3 自带的标准库,请参考官方文档文档:https://docs.python.org/3/library/ 以了解详细使用用法。


标准库中的首选:xml.etree.ElementTree

据说大家都喜欢这个库,那么我就把它列在最前面。据说它性能好,易于理解,那么我就姑且这样认为。

等我多用用再写这一部分啦。

标准库中的所谓标准:xml.domxml.dom.minidom

首先说一下什么是DOM

The Document Object Model, or “DOM,” is a cross-language API from the World Wide Web Consortium (W3C) for accessing and modifying XML documents. A DOM implementation presents an XML document as a tree structure, or allows client code to build such a structure from scratch. It then gives access to the structure through a set of objects which provided well-known interfaces.

来源:python3-doc 20.6节

如果你研究过原生的Javascript中操作DOM的内容的话,你可能对xml.dom这个库产生好感:它是遵从W3C DOM API而设计的。由于W3C只为Java, ECMAScript, IDL三者规定了标准的API接口,Python(3)的非官方实现在很大程度上是参考了IDL中的API设计,但没有刻意追求百分百相同。

W3C对于DOM的设计是分层次(Level)的,越是高层的标准包含了越多的特性与内容(同时,其被采纳的越少)。Python(3)中实现了对DOM Level 2 Spec.的兼容,暂时没有管Level 3的内容。xml.dom.minidom是一个简易的实现,只实现了第一层的规范与少量的第二层规范内容,同样其实现代码也被大大简化。

xml.dom库的功能是完备而齐全的。你可以使用它解析、生成、输出XML文件与字符串。

总体感觉用这个库和原生JS中操作DOM的感觉很类似,大部分方法的名称都相同,可以找到一种亲切感。


第三方库的选择:lxml

pypi上面有一些有意思的库,例如lxml。这个库号称xml.etree.ElementTree的加强版,据说提供了强大的功能(听说例如完整的XPath支持),但唯一的不方便之处是它依赖著名的libxml2库,而这是一个用C语言写成的库,所以安装时需要编译它。如果你的工作环境支持的话,用一用试试也无妨。

ed 文本编辑器使用笔记

昨晚抽风一般地想要学学 ed 究竟应该怎么用,于是花了十多分钟学习了一下基础用法,可以保证在紧急情况下“存活”。稍微整理一下自己学到的用法:

调用

ed [file]

一般使用

如果是创建新文件的话,进入程序后除了光标什么都不会显示;如果是打开已有文件,那么会显示一行文件大小的字节数,然后光标到下一行等待用户输入。

ed 是基于行的文本编辑器,也就是说同时只能显示或编辑文件的某一行。和 Vi 类似,存在两种模式:输入模式和命令模式。默认打开文件后进入命令模式。

既然是基于行的编辑器,那么 ed 有一个“当前行”的概念,可以使用 n 查看之,会打印出当前所在行号。默认打开文件后自动跳转至文件末尾(也就是最后一行)。

在命令模式下输入编辑器不认识的命令,会回显一个问号 ? 表示输入错误。

文字输入

切换至输入模式的命令如下:

  • a,在当前行的下一行开始插入文字;
  • i,在当前行的上一行开始插入文字;
  • c,抹除当前行的所有文字,重新输入。

注意 c 命令的危险性。

切换至输入模式后,就请随意地打字吧,回车也会忠实地写入文件。缺点是没有办法修改回车符以前的输错的文字。如果想修改,必须退出当前的输入模式再尝试修改。

补充说明,如果你想要删除文字,可以在定位到某行之后,配合使用 c 与 . 来达到删除所在行的目的。

如果想退出输入模式,在新行输入 . 即可。就是英文句点。

导航

以下导航命令当然是在命令模式下。

  • 直接输入行号并回车,跳转到对应行,并回显对应行的文字(不带行号)。
  • 输入回车,会跳转到下一行,并回显对应行的文字(不带行号)。
  • 输入 . ,会重复显示当前行的文字(不带行号)。
  • 输入 n,会回显当前行的文字(带行号)。

保存与退出

在编辑已有文件的时候,输入 w 可以进行保存,回显新文件的字节大小。

在编辑新文件时,需要在 w 后接上文件名。回显相同。

q 可以退出编辑器。在没有保存文件的时候,则必须用 Q 强制退出。当然 ctrl+c 是没有用的。

科大网络通的自动化

自2014年2月起,jameszhang 更新了科大的网络通界面,适当简化了登陆流程,原来绿油油的界面也不见了。

要想自动化地连接网络通,最好的方法是网络通脚本,这里收集一下,也许不是都能用,等以后再整理。

1. jameszhang 简化过的脚本,原文发表在瀚海星云BBS的USTCnet版某帖子

#!/bin/bash
curl --data "name=user&password=pass&cmd=set&type=出口&exp=time"
http://wlt.ustc.edu.cn/cgi-bin/ip

2. socketk (雨中片汤) 写的 python3 脚本,原文发表在瀚海星云BBS的Love版某帖子

原注:python3的语法,本来是自用的,所以没有把用户名和密码搞成参数,大家在中括号
里面改成自己的就妥了~

3. (待整理)