最も完全な要約であるPythonデータ処理ファミリーバケットについて話してください!

1はじめに

実際のプロジェクトでは、さまざまな構成ファイルが頻繁に発生するため、プロジェクトの保守性が向上します。

JSON、ini / config、YAML、XMLなどを含む一般的なアクセサリファイルの処理方法。

この記事では、Pythonデータ処理ファミリバケットの構成ファイルの概要について説明します。

2.JSON

PythonにはJSONモジュールが組み込まれており、JSONデータを簡単に操作できます。

4つの一般的な方法は次のとおりです。

  • json.load(json_file)は、JSONファイルを解析し、Pythonで対応するデータタイプに変換します
  • json.loads(json_string)はJSON形式の文字列を解析し、結果はPythonの辞書になります
  • json.dump(python_content、file_path)は、次のようなPythonデータを書き込みます:dict、listをファイルに
  • json.dumps(python_dict)は、PythonのdictをJSON形式の文字列に変換します

例として、次のJSON構成ファイルを取り上げます。

#config.json 
{ 
  "mysql":{ 
    "host": "198.0.0.1"、
    "port":3306、
    "db": "xh"、
    "username": "root"、
    "password": "123456"、
    "desc": "Mysqlパッチ文件" 
  } 
}

1.構成ファイルを読み取ります

構成ファイルを読み取るには、次の2つの方法があります。

json.load()を使用して、構成ファイルを直接読み取ります

または、最初に構成ファイルの内容を読み取り、次にjson.loads()を使用してPythonデータタイプに変換します

複雑な階層型JSON構成ファイルに直面した場合、jsonpathを使用して読み取ることができます。jsonpathはxpathに似ており、通常の式を使用してデータをすばやく読み取ることができます。

import json 

def read_json_file(file_path):
    "" " 
    Read json file 
    :param file_path ::
    return:
    " "" 
    with open(file_path、 'r'、encoding = 'utf-8')as file:

        #メソッド2の読み取り1つ選択
        #メソッド1 
        result = json.load(file)

        #メソッド2 
        #result = json.loads(file.read())

        #データを分析
        host_mysql = result ['mysql'] ['host'] 
        port_mysql = result [' mysql '] [' port '] 
        db = result [' mysql '] [' db '] 

        print(' Mysql address: '、host_mysql、 "、port number:"、port_mysql、 "、database:"、デシベル)
    の戻り結果

2.構成ファイルを保存します

jsonのjson.dump()メソッドを使用すると、JSONファイルに辞書を書き込むことができます。

def write_content_to_json_file(output_file、content):
    "" "は
    jsonファイルに書き込まれます
    :param output_file 
    :: param content 
    :: return:
    " "" 
    with open(output_file、 'w')as file:ファイルに書き込まれます
        #注:中国語が正常に表示されるようにするには、ensure_ascii = False 
        json.dump(content、file、ensure_ascii = False)

content_dict = { 
    'mysql':{ 
        'host': '127.0.0.1'、
        'port':3306、を設定する必要があります
        'db': 'xh'、
        'username': 'admin'、
        'password': '123456'、
        'desc': 'Mysql database'
    } 
} 

write_content_to_json_file( './ output.json'、content_dict)

3.構成ファイルを変更します

構成ファイルを変更する必要がある場合は、最初に構成ファイルからコンテンツを読み取り、次にコンテンツを変更し、最後に変更したコンテンツを構成ファイルに保存するだけです。

def modify_json_file():
    "" "
    修改json配置文件
    :return:
    " "" 
    result = read_json_file( './ config.json')

    #修改
    結果['mysql'] ['host'] = '198.0.0.1' 

    write_content_to_json_file ( './config.json'、結果)

3.ini / config

ini構成ファイルと構成構成ファイルの解析方法は似ていますが、ファイルのサフィックスが一貫していません

ここでは、例としてini構成ファイルを取り上げます。

#config.ini 
[mysql] 
host = 139.199.1.1 
username = root 
password = 123456 
port = 3306

iniファイルは、ノード(セクション)、キー(キー)、値(値)の3つの部分で構成されています。

Pythonがiniファイルを処理するには、次の2つの一般的な方法があります。

  • 組み込みのconfigparser標準モジュールを使用する
  • configobjサードパーティ依存関係ライブラリを使用する

まず、組み込みのconfigparserモジュールを見てみましょう。

3.1.1構成ファイルの読み取り

ConfigParser解析オブジェクトをインスタンス化し、read()メソッドを使用してini構成ファイルを読み取ります

from configparser import ConfigParser 

#解析オブジェクトをインスタンス化します
cfg = ConfigParser()

#iniファイルの内容を読み取ります
cfg.read(file_path)

セクション()関数を使用して、すべてのノードのリストを取得します


#sections()すべてのセクションを取得し、セクションのリストとして返します= cfg.sections()
print(sections)

特定のノードの下にあるすべてのキーを取得するには、options(section_name)関数を使用できます

#特定の領域のすべてのキーを取得します
#cfg.options(section_name)
keys = cfg.options( 'mysql')
print(keys)

items(section_name)関数を使用すると、特定のノードですべてのキーと値のペアを取得できます

#特定の領域でキーと値のペア
アイテムを取得= cfg.items( "mysql")
print(items)

特定のノードの下の特定のキーの下で値を取得する場合は、get(section_name、key_name)関数を使用します

#特定の領域でキー値を読み取る
host = cfg.get( "mysql"、 "host")
print(host)

3.1.2構成ファイルの書き込み

構成ファイルの読み取りと同様に、ConfigParserパーサーオブジェクトをインスタンス化する必要があります

まず、add_section(section_name)関数を使用してノードを追加します

#ノードとキーと値のペアを結合します#ノードを
追加します
cfg.add_section( "redis")

次に、set(section_name、key、value)関数を使用して、キーと値のペアをノードに追加できます。

#ノードに、キーと値のペア
cfg.set( "redis"、 "host"、 "127.0.0.1")
cfg.set( "redis"、 "port"、 "12345")を追加します。

最後に、write()関数を使用して構成ファイルに書き込みます

#ファイルに
書き込むcfg.write(open( './ raw / output.ini'、 'w'))

3.1.3構成ファイルを変更する

構成ファイルを変更する手順は、構成ファイルを読み取り、set(section_name、key、value)を使用して変更し、最後にwrite()関数を使用してファイルに書き込むことです。

def modify_ini_file(file_path):
    "" "
    修改ini文件
    :return:
    " "" 
    cfg.read(file_path)

    cfg.set( "mysql"、 "host"、 "139.199.11.11")

    #写入
    cfg.write(open (file_path、 "w"))

次に、configobjを使用してini構成ファイルを操作するプロセスについて説明します。

最初にconfigobj依存関係ライブラリをインストールします

#依存関係
#pip3 install configobj

3.2.1構成ファイルの読み取り

ini構成ファイルのパスをパラメーターとして直接使用し、ConfigObjクラスを使用してオブジェクトを作成します

from configobj import ConfigObj 

#インスタンス化対象構成
= ConfigObj(file_path、encoding = 'UTF8')

ソースコードを見ると、ConfigObjはSectionノードのサブクラスであり、SectionはDict辞書のサブクラスであることがわかります。

したがって、キー名Keyを介してノードとキーの値を直接取得できます。

#<class'configobj.ConfigObj '> 
print(type(config))

#<class'configobj.Section'> 
print(type(config ['mysql']))

#node 
print(config ['mysql'])

#someキーに対応する値
print(config ['mysql']

3.2.2構成ファイルの変更

構成ファイルを読み取ってから、ConfigObjオブジェクトを直接変更し、最後にwrite()メソッドを使用して、構成ファイルを変更する目的を達成するだけです。

デフmodify_ini_file(FILE_PATH):
    "" "
    修正iniファイル
    :のparam FILE_PATH: リターン:
    """ 読むコンフィギュレーションファイルの
    設定= read_ini_file(FILE_PATH) 
変更
    設定[ 'mysqlの'] [ 'ホスト'] =「139.199 .1.1 ' 

    #キーと値のペアを削除します
    try:
        del config [' mysql '] [' db ']
    ただし例外はe:
        print(' key does not present ')
        pass 

    #write 
    config.write()

3.2.3構成ファイルの書き込み

構成ファイルを作成するには、最初にConfigObjオブジェクトをインスタンス化し、ファイルパスを渡す必要があります。

次に、ノードを設定し、ノードのキーと値のペアを設定します

最後に、write()メソッドを呼び出して構成ファイルに書き込みます

def write_to_ini_file(output):
    "" "
    写入到ini文件中
    :param output ::
    return:
    " "" 
    config = ConfigObj(output、encoding = 'UTF8')
    config ['website'] = {} 
    config ['website '] [' url '] = "www.baidu.com" 
    config [' website '] [' name '] = "百度" 
irconfig.write 
    ()

4.YAML

PythonはYAMLファイルを操作します。2つの一般的な方法は次のとおりです。pyyaml、ruamel.yaml

pipを使用して依存関係をインストールします

#インストールに依存
#方法1 
pip3 install pyyaml 

#方法2 
pip3 install ruamel.yaml

2つの方法で説明するために、例として簡単なYAML構成ファイルを取り上げましょう。


果実:
  #アップル-アップル
      名前:アップル
      価格:1
      住所:広東
  #オレンジ-オレンジ
      名前:オレンジ
      価格:3
      住所:湖南
  #バナナ-バナナ
      名前:バナナ
      価格:2
      住所:海南

最初にpyyamlを見てみましょう

4.1.1構成ファイルの読み取り

まず、構成ファイルを読み取り、yaml.safe_load()を使用してデータをロードします。取得されるデータ・タイプは辞書です。



open(file_path、 "r")をファイルとしてyamlインポートします
    。data= file.read()

    #safe_load()構成ファイルを読み取ります
    #結果データタイプ:dict 
    result = yaml.safe_load(data)

    print(result)

次に、YAML構成ファイルの階層関係を通じてキー値を取得できます。

#3、获取yaml中的值
name = result ['Fruits'] [0] ['Apple'] ['name'] 
price = result ['Fruits'] [0] ['Apple'] ['price'] 
address = result ['Fruits'] [0] ['Apple'] ['address'] 
print( "名称:"、name、 "、price:"、price、 "、address:"、address)

4.1.2構成ファイルの書き込み

YAMLのdump()メソッドを使用して、YAML構成ファイルに辞書を書き込みます。

中国語の書き込みが正常に表示されるようにするには、allow_unicode = Trueを構成する必要があることに注意してください。

def write_to_yaml_file(content、file_path):
    "" "は
    yamlファイルに書き込まれます
    :param content 
    :: param file_path 
    :: return:
    " "" 
    #open(file_path、 'w'、encoding = 'utfで

    ファイルに書き込まれます-8 ')as file:
        yaml.dump(content、file、default_flow_style = False、encoding =' utf-8 '、allow_unicode = True)

#辞書の
コンテンツを定義する= { 
   "websites":[{"baidu":{' url ': "www.baidu.com"、' name ':' Baidu '、 "price":100}}、{"alibaba":{' url ': "www.taobao.com"、' name ':' Taobao '、 "price":200}}、{"tencent":{' url ': "www.tencent.com"、' name ': '腾讯'、 "価格":300}}、] 
} 

write_to_yaml_file(content、 "./raw/new.yaml")

4.1.3構成ファイルを変更する

そして、iniファイルの種類を変更し、最初に構成ファイルを読み取り、次に辞書の内容を変更し、最後に上記の書き込み方法を使用します。これにより、構成ファイルを変更する目的を達成できます。

デフmodify_yaml_file():
    "" "
    修正YAMLファイル
    :リターン"""
    コンテンツ= read_yaml_file(」./生/ norm.yaml ')
    プリント(コンテンツ)

    #修正辞書の
    内容['フルーツ'] [0] ['アップル'] [' price '] = 10086 

    #新しいyamlファイルに書き換えます
    write_to_yaml_file(content、'。/ raw / output.yaml ')

次に、ruamelを使用してYAML構成ファイルを操作するプロセスについて説明します。

Ruamelはpyyamlの派生バージョンであり、従来のpyyamlに基づいて、YAML構成ファイルの読み取りと書き込みの順序が同じになるようにRoundTripモードが追加されています。

したがって、読み取り、変更、書き込みの点でpyyamlに似ています

4.2.1構成ファイルの読み取り

from ruamel import yaml 

def read_yaml_file(file_path):
    "" "
    读取yaml文件
    :param file_path 
    :: return:
    " "" 
    with open(file_path、 'r'、encoding = 'utf-8')as file:
        data = file .read()

        #解析yaml文件クラス型:ordereddict 
        result = yaml.load(data、Loader = yaml.RoundTripLoader)

        name = result ['Fruits'] [0] ['Apple'] ['name'] 
        price = result ['Fruits'] [0] ['Apple'] ['price'] 
        address = result ['Fruits'] [0] ['Apple'] ['address'] 
        print( "出力:"、name、 "、価格: "、価格、"、アドレス: "、アドレス)

    結果を返す

4.2.2構成ファイルの書き込み

def write_to_yaml_file(filepath、data):
    "" "
    写入到yaml文件中
    :param filepath 
    :: param data 
    :: return:
    " "" 
    with open(filepath、 'w'、encoding = 'utf-8')as file :
        yaml.dump(data、file、Dumper = yaml.RoundTripDumper、allow_unicode = True)

4.2.3構成ファイルを変更する

デフmodify_yaml_file():
    "" "
    修正YAMLファイル
    :リターン"""
    コンテンツ= read_yaml_file(」./生/ norm.yaml ')

    プリント(コンテンツ)

    #修正辞書の
    内容['フルーツ'] [0] ['アップル'] [' price '] = 10086 

    #新しいyamlファイルに書き換えます
    write_to_yaml_file(' ./ raw / output.yaml '、content)

5.XML

マークアップ言語として、XMLはデータの保存と送信を設計するために使用されます。多くのプロジェクトでは、構成ファイルとデータ送信タイプとしてXMLを使用することがよくあります。

Pythonの組み込みxmlモジュールは、XML構成ファイルを簡単に処理できます

例として、次の構成ファイルを取り上げます。

<?xml version = "1.0" encoding = "utf-8"?> 
<dbconfig> 
    <mysql> 
        <host> 127.0.0.1 </ host> 
        <port> 3306 </ port> 
        <dbname> test </ dbname> 
        < username> root </ username> 
        <password> 4355 </ password> 
    </ mysql> 
</ dbconfig>

まず、xml.dom.minidom.parser(file_path)を使用して構成ファイルを解析し、documentElementプロパティを使用してXMLルートノードを取得します

import xml.dom.minidom 

#構成ファイルの読み取り
dom = xml.dom.minidom.parse( "./ raw.xml")

#documentElementプロパティを使用してXMLルートノードを取得します
#ルートノード
root = dom.documentElement

次に、getElementsByTagName(tag_name)メソッドを使用してノードを取得します


#mysqlノードを取得node_mysql = root.getElementsByTagName( 'mysql')[0]

最後に、childNodesプロパティを使用して、ノードの子ノードノードをトラバースし、ノードの名前と値を取得します

#子ノードをトラバースして
、node_mysql.childNodes内のノードの名前と値を取得します。
    #ノードタイプ
    #1:要素
    #2:属性
    #3:テキスト
    #print(node.nodeType)
    if node.nodeType == 1:
        print(node。 nodeName、node.firstChild.data)

6.最後に

この時点で、Pythonデータファミリーバケットはすべて終わりました。

記事のすべてのソースコードをバックグラウンドにアップロードしました。➡青いフォントをクリックしてソースコード取得します

おすすめ

転載: blog.csdn.net/weixin_43881394/article/details/109074821