Python gzip圧縮されたxmlファイルを扱う

引き続きPubChemからダウンロードした化合物リストを扱います。

サンプルとしてここら辺から適当な.xml.gzファイルをダウンロードしてみてください。

 

gzipからテキストを取得してxmlとして読み込む

こんな感じで化合物のSIDと名前(リスト)を取得しました。

import os
import gzip
import xml.etree.ElementTree as ET

# gzipファイルからテキストを取得
def read_gz(file_path):
    print('read_gz: ' + file_path)
    file_name, ext = os.path.splitext(file_path)

    if not ext == '.gz':
        print('this file is not .gz')
        return

    with gzip.open(file_path, 'rt', 'utf_8') as f:
        content = f.read()

    return content


# テキストからxmlを作成
def read_xml(content):
    print('read_xml: ')
    root = ET.fromstring(content)
    elms = root.findall('{http://www.ncbi.nlm.nih.gov}PC-Substance')
    substances = []

    for elm in elms:
        sid = elm.find('{http://www.ncbi.nlm.nih.gov}PC-Substance_sid').find('{http://www.ncbi.nlm.nih.gov}PC-ID').find('{http://www.ncbi.nlm.nih.gov}PC-ID_id').text
        names_elm = elm.find('{http://www.ncbi.nlm.nih.gov}PC-Substance_synonyms').findall('{http://www.ncbi.nlm.nih.gov}PC-Substance_synonyms_E')
        names = [elm.text for elm in names_elm]
        substances.append({
            'sid': sid,
            'names': names
        })

    return substances

 

参考

コメントを残す