【Pythonを使いこなす100日目】28日目:ファイルとIO操作_JSONファイル処理

 目次 

コラムガイド 

1. JSONデータ形式の概要

1.1 サンプルの JSON データ

1.2 JSONファイルの特徴 

2 jsonモジュールの共通操作

2.1 JSONファイルの読み書き例

2.2 JSON文字列の解析

2.3 JSONデータの変更

 2.4 ネストされたデータのクエリと操作

2.5 特殊文字を含む JSON ファイルの処理

2.6 日付と時刻の操作 

2.7 大きな JSON ファイルの処理

2.8 フォーマットされた出力

2.9 入れ子構造と深い JSON の処理

2.10 JSONファイルの読み込みに失敗した場合の対処方法

3 jsonファイル形式変換

3.1 JSON から CSV への変換

3.2 JSON から XML への変換

3.3 JSON を YAML に変換する

3.4 CSV/XML/YAML から JSON への変換

4 CSV/XML/YAML を JSON に変換する

4.1 CSV から JSON への変換

4.2 XML から JSON への変換

4.3 YAML から JSON への変換


コラムガイド 

コラム購読アドレス:https://blog.csdn.net/qq_35831906/category_12375510.html

1. JSONデータ形式の概要

        JSON (JavaScript Object Notation) は、データの保存と交換に広く使用されている軽量のデータ交換形式です。人間にとっては読み書きが簡単であるだけでなく、機械にとっても解析や生成が簡単です。JSON の主な特徴は次のとおりです。

        基本構造: JSON はキーと値のペアで構成され、キーと値はコロンで区切られ、異なるキーと値のペアはカンマで区切られます。JSON データ構造をネストして、複雑なデータ構造を構築できます。 

        データ型: JSON は、次のようなさまざまなデータ型をサポートしています。

  • オブジェクト (オブジェクト) : 中括弧で囲まれており{}、キーと値のペアが含まれています。キーは文字列で、値は文字列、数値、ブール値、オブジェクト、配列などです。
  • 配列 (配列) : 角括弧で囲まれ[]、複数の値が含まれます。値には文字列、数値、ブール値、オブジェクト、配列などが含まれます。
  • String (String) : 二重引用符で囲まれ"、任意の Unicode 文字を含めることができます。
  • 数値 (数値) : 整数または浮動小数点数を指定できます。
  • Boolean : true または false を示します。
  • Null : データが空または欠落していることを示します。

1.1 サンプルの JSON データ

{
  "name": "John",
  "age": 30,
  "is_student": false,
  "hobbies": ["reading", "swimming"],
  "address": {
    "street": "123 Main St",
    "city": "Cityville"
  }
}

1.2 JSONファイルの特徴 

  1. 読みやすい: JSON は明確な構造を持っており、読みやすく理解しやすく、人間とマシン間の対話に適しています。

  2. クロスプラットフォーム: JSON はプログラミング言語であり、プラットフォームに依存しない形式であるため、異なる言語やオペレーティング システム間でのデータ交換に適しています。

  3. 幅広い用途: JSON は、ネットワーク送信、設定ファイル、API 対話、ログ記録などの分野で広く使用されています。

JSON はそのシンプルさと読みやすさにより、今日のアプリケーションとシステム間のデータ交換に好まれる形式の 1 つとなっています。フロントエンドとバックエンドの開発でも、データの処理と保存でも、JSON を使用してデータを簡単に表現および転送できます。

2 jsonモジュールの共通操作

  jsonこのモジュールは、json.dumps()Python オブジェクトを JSON 形式の文字列に変換する機能と、json.loads()JSON 形式の文字列を Python オブジェクトに解析する機能の 2 つの主な機能を提供します。さらに、JSON ファイルの読み取りと書き込みのための関数もあります。つまり、json.dump()Python オブジェクトを JSON ファイルに書き込むための関数、json.load()JSON ファイルからデータを読み取り、Python オブジェクトに変換するための関数です。

2.1 JSONファイルの読み書き例

json以下は、モジュールを使用して JSON ファイルを読み書きする        方法を示す簡単な例です。

import json

# 要写入JSON文件的数据
data = {
    "name": "Alice",
    "age": 25,
    "is_student": True,
    "hobbies": ["painting", "gardening"],
    "address": {
        "street": "456 Elm St",
        "city": "Townsville"
    }
}

# 将数据写入JSON文件
with open("data.json", "w") as json_file:
    json.dump(data, json_file, indent=4)  # indent用于美化输出

# 从JSON文件读取数据
with open("data.json", "r") as json_file:
    loaded_data = json.load(json_file)

# 打印读取的数据
print(loaded_data)

        この例では、まず Python 辞書を「data.json」という名前の JSON ファイルに書き込み、次にそのファイルからデータを読み取り、Python オブジェクトとして読み込みます。ロードされたデータは元のデータと同じであり、loaded_data辞書として変数に格納されます。

2.2 JSON文字列の解析

この関数を使用してjson.loads()、JSON 形式の文字列を Python 辞書またはリストに解析します。

import json

json_string = '{"name": "Bob", "age": 30}'
data = json.loads(json_string)

2.3 JSONデータの変更

JSON データを読み取った後、JSON ファイルに書き戻す前に変更できます。

import json

with open("data.json", "r") as json_file:
    data = json.load(json_file)

# 修改数据
data["age"] = 28

with open("data.json", "w") as json_file:
    json.dump(data, json_file, indent=4)

 2.4 ネストされたデータのクエリと操作

JSON データが入れ子構造になっている場合、辞書またはリストを使用して内部データをクエリおよび操作できます。

import json

with open("data.json", "r") as json_file:
    data = json.load(json_file)

# 查询嵌套数据
city = data["address"]["city"]
hobbies = data["hobbies"]

# 修改嵌套数据
data["address"]["city"] = "New City"
data["hobbies"].append("cooking")

2.5 特殊文字を含む JSON ファイルの処理

場合によっては、JSON ファイルに特殊文字 (Unicode エスケープ文字など) や印刷不可能な文字が含まれる場合があります。これらのファイルを読み取って処理する場合、デコードして処理する必要がある場合があります。

import json

with open("special_chars.json", "r", encoding="utf-8") as json_file:
    raw_data = json_file.read()
    cleaned_data = raw_data.encode("utf-8").decode("unicode_escape")

parsed_data = json.loads(cleaned_data)
print(parsed_data)

2.6 日付と時刻の操作 

import json
from datetime import datetime

data_with_dates = {
    "event": "birthday",
    "date": "2023-08-07T15:30:00Z"
}

date_string = data_with_dates["date"]
parsed_date = datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ")
print(parsed_date)

2.7 大きな JSON ファイルの処理

大きな JSON ファイルの場合、メモリ フットプリントを減らすために 1 行ずつ読み取り、処理する必要がある場合があります。

import json

with open("large_data.json", "r") as json_file:
    for line in json_file:
        data = json.loads(line)
        # 处理每一行的数据

2.8 フォーマットされた出力

使用するとjson.dump()indent出力を美しくし、読みやすくするためにパラメーターを設定できます。

import json

data = {
    "name": "Alice",
    "age": 25,
    "hobbies": ["painting", "gardening"]
}

with open("output.json", "w") as json_file:
    json.dump(data, json_file, indent=4)

2.9 入れ子構造と深い JSON の処理

        JSON データが深くネストされた構造を持つ場合、特定のデータへのアクセスと処理が複雑になる可能性があります。再帰的メソッドを使用して、深くネストされた構造を処理できます。

def get_value(data, target_key):
    if isinstance(data, dict):
        for key, value in data.items():
            if key == target_key:
                return value
            if isinstance(value, (dict, list)):
                result = get_value(value, target_key)
                if result is not None:
                    return result
    elif isinstance(data, list):
        for item in data:
            result = get_value(item, target_key)
            if result is not None:
                return result

    return None

# 示例JSON数据
nested_data = {
    "person": {
        "name": "Alice",
        "address": {
            "street": "123 Elm St",
            "city": "Townsville"
        }
    }
}

target_value = get_value(nested_data, "city")
print(target_value)  # 输出:Townsville

2.10 JSONファイルの読み込みに失敗した場合の対処方法

 JSON ファイルの内容を正常に読み取ることができなかったため、json.load()関数でエラーが報告されました。

ファイル パスが正しいこと、ファイルが存在し、読み取り可能であることを確認してください。ファイルのエンコードが正しいことを確認してください。通常はutf-8そのエンコードを使用します。

import json

try:
    with open("data.json", "r", encoding="utf-8") as json_file:
        data = json.load(json_file)
except FileNotFoundError:
    print("JSON file not found.")
except json.JSONDecodeError:
    print("Error decoding JSON data.")

3 jsonファイル形式変換

3.1 JSON から CSV への変換

        CSV (カンマ区切り値) は、カンマ区切りフィールドを含むテキスト ファイル形式です。Pythoncsvモジュールを使用して、JSON データを CSV 形式に変換できます。

import json
import csv

with open("data.json", "r") as json_file:
    data = json.load(json_file)

with open("data.csv", "w", newline="") as csv_file:
    csv_writer = csv.writer(csv_file)
    # 写入表头
    csv_writer.writerow(data[0].keys())
    # 写入数据
    for item in data:
        csv_writer.writerow(item.values())

3.2 JSON から XML への変換

        XML (eXtensible Markup Language) は、構造化データを表現するために使用されるマークアップ言語です。Python などの Python のサードパーティ ライブラリを使用して、xmltodictJSON データを XML 形式に変換できます。

import json
import xmltodict

with open("data.json", "r") as json_file:
    data = json.load(json_file)

xml_data = xmltodict.unparse({"root": data})
with open("data.xml", "w") as xml_file:
    xml_file.write(xml_data)

3.3 JSON を YAML に変換する

        YAML (YAML Ain't Markup Language) は、可読性の高いデータシリアル化形式です。Python のpyyamlライブラリを使用して、JSON データを YAML 形式に変換できます。

import json
import yaml

with open("data.json", "r") as json_file:
    data = json.load(json_file)

with open("data.yaml", "w") as yaml_file:
    yaml.dump(data, yaml_file, default_flow_style=False)

3.4 CSV/XML/YAML から JSON への変換

        同様に、使用するライブラリに応じて、CSV、XML、YAML ファイルを JSON 形式に変換できます。たとえばcsv、 、xmltodictpyyamlなどのライブラリを使用して、対応する変換を実行できます。

4 CSV/XML/YAML を JSON に変換する

4.1 CSV から JSON への変換

import csv
import json

csv_file_path = "data.csv"
json_file_path = "data_from_csv.json"

data = []

with open(csv_file_path, "r") as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        data.append(row)

with open(json_file_path, "w") as json_file:
    json.dump(data, json_file, indent=4)

4.2 XML から JSON への変換

XML ファイルがあるとしますdata.xml

<root>
    <item>
        <name>John</name>
        <age>30</age>
    </item>
    <item>
        <name>Alice</name>
        <age>25</age>
    </item>
</root>

XML を JSON に変換するサンプルコードは次のとおりです。

import xmltodict
import json

xml_file_path = "data.xml"
json_file_path = "data_from_xml.json"

with open(xml_file_path, "r") as xml_file:
    xml_data = xml_file.read()
    json_data = json.dumps(xmltodict.parse(xml_data), indent=4)

with open(json_file_path, "w") as json_file:
    json_file.write(json_data)

4.3 YAML から JSON への変換

YAML ファイルがあるとしますdata.yaml

- name: John
  age: 30
- name: Alice
  age: 25

YAML を JSON に変換するサンプルコードは次のとおりです。

import yaml
import json

yaml_file_path = "data.yaml"
json_file_path = "data_from_yaml.json"

with open(yaml_file_path, "r") as yaml_file:
    yaml_data = yaml.safe_load(yaml_file)
    json_data = json.dumps(yaml_data, indent=4)

with open(json_file_path, "w") as json_file:
    json_file.write(json_data)

おすすめ

転載: blog.csdn.net/qq_35831906/article/details/131983359