Archive for 1月 9th, 2011

XMLを使ってみた

1月 9th, 2011 by admin

PythonでXMLを読んでみたので、メモを残しておきます。JavaやPHPで同じような処理を書いたこともありますが、Pythonでの記述が一番楽だと感じました。

まずは、ライブラリをインポート。parseはファイルを解析してDOMを作る関数、parseStringは文字列を解析してDOMを作る関数です。

1
from xml.dom.minidom import parse, parseString

文字列からDOMを作ってみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>> dom = parseString("<hoge><foo></foo><bar/></hoge>")
>>> print dom
<xml.dom.minidom.Document instance at 0x000000000235D9C8>
>>> type(dom)
<type 'instance'>
>>> dir(dom)
['ATTRIBUTE_NODE', 'CDATA_SECTION_NODE', 'COMMENT_NODE', 'DOCUMENT_FRAGMENT_NODE
'
, 'DOCUMENT_NODE', 'DOCUMENT_TYPE_NODE', 'ELEMENT_NODE', 'ENTITY_NODE', 'ENTITY
_REFERENCE_NODE'
, 'NOTATION_NODE', 'PROCESSING_INSTRUCTION_NODE', 'TEXT_NODE', '
__doc__'
, '__init__', '__module__', '__nonzero__', '_call_user_data_handler', '_
child_node_types'
, '_create_entity', '_create_notation', '_elem_info', '_get_act
ualEncoding'
, '_get_async', '_get_childNodes', '_get_doctype', '_get_documentEle
ment'
, '_get_documentURI', '_get_elem_info', '_get_encoding', '_get_errorHandler
'
, '_get_firstChild', '_get_lastChild', '_get_localName', '_get_standalone', '_g
et_strictErrorChecking'
, '_get_version', '_id_cache', '_id_search_stack', '_magi
c_id_count'
, '_set_async', 'abort', 'actualEncoding', 'appendChild', 'async', 'a
ttributes'
, 'childNodes', 'cloneNode', 'createAttribute', 'createAttributeNS', '
createCDATASection'
, 'createComment', 'createDocumentFragment', 'createElement',
 'createElementNS', 'createProcessingInstruction', 'createTextNode', 'doctype',
'documentElement', 'documentURI', 'encoding', 'errorHandler', 'firstChild', 'get
ElementById'
, 'getElementsByTagName', 'getElementsByTagNameNS', 'getInterface',
'getUserData', 'hasChildNodes', 'implementation', 'importNode', 'insertBefore',
'isSameNode', 'isSupported', 'lastChild', 'load', 'loadXML', 'localName', 'names
paceURI'
, 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'normalize', 'owne
rDocument'
, 'parentNode', 'prefix', 'previousSibling', 'removeChild', 'renameNod
e'
, 'replaceChild', 'saveXML', 'setUserData', 'standalone', 'strictErrorChecking
'
, 'toprettyxml', 'toxml', 'unlink', 'version', 'writexml']

XML表現に変換してみました。中身が空のタグが空要素タグに書き換わっていたり、先頭にXMLのバージョンが追加されたりしています。

1
2
>>> print dom.toxml()
<?xml version="1.0" ?><hoge><foo/><bar/></hoge>

toprettyxmlメソッドを使うと、美しいXMLが出力されます。

1
2
3
4
5
6
>>> print dom.toprettyxml()
<?xml version="1.0" ?>
<hoge>
        <foo/>
        <bar/>
</hoge>

domのchildNodesには、トップレベルのノードのhogeが含まれています。

1
2
3
4
>>> for node in dom.childNodes:
...   print node
...
<DOM Element: hoge at 0x2362988>

hogeノードの子要素には、foo要素とbar要素が含まれています。

1
2
3
4
5
6
>>> for node in dom.childNodes:
...   for subnode in node.childNod
...     print subnode
...
<DOM Element: foo at 0x2362a88>
<DOM Element: bar at 0x2362b08>

タグ名指定で子要素を取り出します。結果は該当タグのリストです。

1
2
>>> print dom.getElementsByTagName('hoge')
[<DOM Element: hoge at 0x2362988>]

さらに子要素を取り出します。

1
2
>>> print dom.getElementsByTagName('hoge')[0].getElementsByTagName('foo')
[<DOM Element: foo at 0x2362a88>]

属性を取り出します。

1
2
3
4
5
>>> dom2 = parseString('<shop><book id="book1" title="python25"/></shop>')
>>> print dom2.getElementsByTagName('shop')[0].getElementsByTagName('book')[0].getAttribute('title')
python25
>>> print dom2.getElementsByTagName('shop')[0].getElementsByTagName('book')[0].getAttribute('id')
book1

リスト内包表記のページを作成

1月 9th, 2011 by admin

リスト内包表記のページを作りました。
http://php6.jp/python/basics/リスト内包表記/

いまだに2次元以上のリストに対する、リスト内包表記の記述は混乱します。

Pythonが2010年のプログラミング言語に選ばれた

1月 9th, 2011 by admin

TIOBE Programming Community Index for January 2011

Pythonが2010年のプログラミング言語に選ばれたそうです。2010年中に1.81%シェアを伸ばし、これは、Objective-C(+1.63%)よりも高い伸びだったそうです。

なお、言語別のシェアは、
1. Java
2. C
3. C++
4. PHP
5. Python
6. C#
7. (Visual)Basic
8. Objective-C
9. Perl
10. Ruby
11. JavaScript
12. Delphi
13. Lisp
14. Pascal
15. Assembly
16. SAS
17. Transact-SQL
18. RPG(OS/400)
19. MATLAB
20. Ada
となっています。13位までの言語は、授業または仕事で使ったことあります。