0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】JSONファイルからランダムにエントリを選び、それぞれのエントリを連番で命名された個別のファイルに保存する方法

Posted at

概要

  • 指定したJSONファイルからランダムなエントリを抽出し、それぞれのエントリを個別のファイル001_product.jsonから100_product.jsonに保存する方法を紹介します。

サンプルコード解説

import json
import random
import os

# JSON ファイルからランダムにエントリを抽出する関数
def extract_random_entries(json_file, num_entries):
    with open(json_file, 'r', encoding='utf-8') as f:
        data = json.load(f)

    entries = random.sample(data, num_entries)
    return entries

# JSONファイルのパスを指定
json_file_path = './product.json'
# 抽出するエントリ数を指定
num_entries_to_extract = 100

random_entries = extract_random_entries(json_file_path, num_entries_to_extract)

# ファイルを作成するディレクトリを取得(dirnameは、パス文字列からファイル名を除いたディレクトリの部分を取得)
output_directory = os.path.dirname(json_file_path)

# 001_product.jsonから100_product.jsonまでのファイルを作成
for i, entry in enumerate(random_entries, start=1):
    output_file_path = os.path.join(output_directory, f'{str(i).zfill(3)}_product.json')
    with open(output_file_path, 'w', encoding='utf-8') as f:
        json.dump(entry, f, ensure_ascii=False, indent=4)

ゼロパディングについて

  • 今回、1ではなく、001というように、桁数に満たない部分をゼロで埋めています。必要ない場合は、zfillのところを変更して下さい。
  • f'{str(i).zfill(3)}_product.json'については、以下の記法もあります。
destination_file = f"{i:03}_product.json"

enumerate()関数について

  • リストやイテレータなどの要素にインデックスを付け加えるために使用される関数です。
  • 上記サンプルコードの場合、random_entriesリストの要素に対してループ処理を行いながら、それぞれの要素とそのインデックスを取得します。
  • start=1という引数は、インデックスの開始値を指定しています。インデックスは通常0から始まりますが、001から連番で命名させるために指定しています。

日本語のエンコーディングエラーについて

  • JSONファイルに日本語が含まれている場合、JSONファイルの読み込み時や書き込み時にencoding='utf-8'を指定しないとエンコーディングのエラーになりました。また、json.dumpensure_ascii=False引数を指定することで、日本語などの非ASCII文字も正しく処理されるようになります。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?