Skip to content

Instantly share code, notes, and snippets.

@miyakogi
Last active February 8, 2024 08:57
Show Gist options
  • Star 75 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save miyakogi/e8631ce5f7c956db2313 to your computer and use it in GitHub Desktop.
Save miyakogi/e8631ce5f7c956db2313 to your computer and use it in GitHub Desktop.
JSON, YAML, ini, TOML ざっくり比較

JSON

https://ja.wikipedia.org/wiki/JavaScript_Object_Notation

メリット

  • Python標準に含まれている
  • 仕様が厳格に決まっている

デメリット

  • ファイル内にコメントが書けない
  • 末尾コンマ消し忘れるとエラー
  • カッコ多い
  • 書くの簡単じゃないかも

一つにまとめる場合

[
  {"path": "C:\\Download\\paper",
   "extension": ["pdf", "doc"],
   "destination": ["C:\\Dropbox\\論文\\*", "C:\\My Documents\\査読\\*"]},
  {"path": "C:\\Download\\music",
   "extension": ["mp3", "wav", "mp4"],
   "destination": ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]}
]

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

{
  path: ["C:\\Download\\paper", "C:\\Download\\music"]
}

C:\Download\paper の設定ファイル

{
  extension: ["pdf", "doc"],
  destination:  ["C:\\Dropbox\\論文\\*", "C:\\My Documents\\査読\\*"]
}

C:\Download\music の設定ファイル

{
  extension: ["mp3", "wav", "mp4"],
  destination: ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]
}

yaml

https://ja.wikipedia.org/wiki/YAML

メリット

  • コメント書ける
  • 末尾コンマとかあってもなくても大丈夫(たぶん)

デメリット

  • 書くのが難しいらしい?
    • インデント(字下げ)が難しい?
  • Python標準ライブラリに含まれていない
  • バージョンが幾つか存在するらしく、ハマりポイントらしい

一つにまとめる場合

# これはコメント行
- path: 'C:\Download\paper'
  extension:
    - 'pdf'
    - 'doc'
  destination:
    - 'C:\Dropbox\論文\*'
    - 'C:\My Documents\査読\*'
- path: 'C:\Download\music'
  extension: ['mp3', 'wav', 'mp4']  # こういう書き方もできる
  destination: ['C:\Dropbox\音楽\*', 'C:\My Music\*']

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

path: ['C:\Download\paper', 'C:\Download\music']
# または
path: 'C:\Download\paper'
      'C:\Download\music'

C:\Download\paper の設定ファイル

extension:
  - pdf
  - doc
destination:
  - 'C:\Dropbox\論文\*'
  - 'C:\My Documents\査読\*'

C:\Download\music の設定ファイル

# こういう書き方もできる
extension: ["mp3", "wav", "mp4"]
destination: ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]

ini

Windows系の設定ファイルでよく見る形式

メリット

  • 読み書きが簡単
  • Python標準ライブラリに含まれている
  • バックスラッシュのエスケープ不要

デメリット

  • 複雑な機能はない
    • すべて文字列型
    • リストが使えない!
  • 仕様が厳格に決まっていない
    • Pythonで使うだけならConfigParserの仕様に従えば問題にならなそう

一つにまとめる場合

リスト使えない???

# これはコメント行
[C:\Download\paper]
extension=
  pdf
  doc
destination=
  C:\Dropbox\論文\*
  C:\My Documents\査読\*

[C:\Download\music]
extension=
  mp3
  wav
  mp4
destination=
  C:\Dropbox\音楽\*
  C:\My Music\*

同じ構造じゃ無理でした

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

path =
  C:\Download\paper
  C:\Download\music

C:\Download\paper の設定ファイル

extension =
  pdf
  doc

destination =
  C:\Dropbox\論文\*
  C:\My Documents\査読\*

C:\Download\music の設定ファイル

# こういう書き方もできる?
[extension]
mp3
wav
mp4

[destination]
C:\Dropbox\音楽\*
C:\My Music\*

TOML

ini風? 仕様: https://github.com/toml-lang/toml#user-content-integer 仕様の和訳: http://qiita.com/minoritea/items/c0de47b8beb813c655d4

メリット

  • ini風だけど明瞭・高機能
  • コメントも書ける

デメリット

  • 仕様が変更される可能性がある(まだ正式版リリースではない)
  • Python標準ライブラリに含まれていない
  • 難しいところがあるかも

一つにまとめる場合

# これはコメント行
['C:\Download\paper']
extension = ['pdf', 'doc']
destination = ['C:\Dropbox\論文\*', 'C:\My Documents\査読\*']

['C:\Download\music']
extension=['mp3', 'wav', 'mp4']
destination=['C:\Dropbox\音楽\*', 'C:\My Music\*']

分割する場合

全体の設定ファイル (監視対象のフォルダ一覧)

path = [
  'C:\Download\paper',
  'C:\Download\music',  # 最後のコンマはあってもなくてもOK
]

C:\Download\paper の設定ファイル

extension = [
  'pdf',
  'doc'
]

destination = [
  'C:\Dropbox\論文\*',
  'C:\My Documents\査読\*'
]

C:\Download\music の設定ファイル

# こういう書き方もできる? 保留!
extension = [
  "mp3",
  "wav",
  "mp4"
]

destination = [
  "C:\\Dropbox\\音楽\\*",
  "C:\\My Music\\*"
]
@y0d0gawaeuc11d
Copy link

Gmailのフィルター変換用にいろいろ探してます。
わかりやすさはTOMLの圧勝ですなあ

@hyrodium
Copy link

仕様が変更される可能性がある(まだ正式版リリースではない)

これに関しては2021年1月12日に1.0.0がリリースされているので、古い情報になっていますね。
https://github.com/toml-lang/toml/releases/tag/1.0.0

@munechika-koyo
Copy link

munechika-koyo commented Jul 25, 2022

tomllibがpython3.11から標準パッケージになるようですね!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment