JSON, YAML, ini, TOML ざっくり比較
- 参考
- http://hr-sano.net/blog/2014/10/26/1729/
# JSON
https://ja.wikipedia.org/wiki/JavaScript_Object_Notation
## メリット
- Python標準に含まれている
- 仕様が厳格に決まっている
## デメリット
- ファイル内にコメントが書けない
- 末尾コンマ消し忘れるとエラー
- カッコ多い
- 書くの簡単じゃないかも
## 例
### 一つにまとめる場合
```js
[
{"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\\*"]}
]
```
### 分割する場合
#### 全体の設定ファイル (監視対象のフォルダ一覧)
```js
{
path: ["C:\\Download\\paper", "C:\\Download\\music"]
}
```
#### C:\Download\paper の設定ファイル
```js
{
extension: ["pdf", "doc"],
destination: ["C:\\Dropbox\\論文\\*", "C:\\My Documents\\査読\\*"]
}
```
#### C:\Download\music の設定ファイル
```js
{
extension: ["mp3", "wav", "mp4"],
destination: ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]
}
```
# yaml
https://ja.wikipedia.org/wiki/YAML
## メリット
- コメント書ける
- 末尾コンマとかあってもなくても大丈夫(たぶん)
## デメリット
- 書くのが難しいらしい?
- インデント(字下げ)が難しい?
- Python標準ライブラリに含まれていない
- バージョンが幾つか存在するらしく、ハマりポイントらしい
## 例
### 一つにまとめる場合
```yaml
# これはコメント行
- 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\*']
```
### 分割する場合
#### 全体の設定ファイル (監視対象のフォルダ一覧)
```yaml
path: ['C:\Download\paper', 'C:\Download\music']
# または
path: 'C:\Download\paper'
'C:\Download\music'
```
#### C:\Download\paper の設定ファイル
```yaml
extension:
- pdf
- doc
destination:
- 'C:\Dropbox\論文\*'
- 'C:\My Documents\査読\*'
```
#### C:\Download\music の設定ファイル
```yaml
# こういう書き方もできる
extension: ["mp3", "wav", "mp4"]
destination: ["C:\\Dropbox\\音楽\\*", "C:\\My Music\\*"]
```
# ini
Windows系の設定ファイルでよく見る形式
## メリット
- 読み書きが簡単
- Python標準ライブラリに含まれている
- バックスラッシュのエスケープ不要
## デメリット
- 複雑な機能はない
- すべて文字列型
- リストが使えない!
- 仕様が厳格に決まっていない
- Pythonで使うだけならConfigParserの仕様に従えば問題にならなそう
## 例
### 一つにまとめる場合
リスト使えない???
```ini
# これはコメント行
[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
path =
C:\Download\paper
C:\Download\music
```
#### C:\Download\paper の設定ファイル
```ini
extension =
pdf
doc
destination =
C:\Dropbox\論文\*
C:\My Documents\査読\*
```
#### C:\Download\music の設定ファイル
```ini
# こういう書き方もできる?
[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標準ライブラリに含まれていない
- 難しいところがあるかも
## 例
### 一つにまとめる場合
```toml
# これはコメント行
['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
path = [
'C:\Download\paper',
'C:\Download\music', # 最後のコンマはあってもなくてもOK
]
```
#### C:\Download\paper の設定ファイル
```toml
extension = [
'pdf',
'doc'
]
destination = [
'C:\Dropbox\論文\*',
'C:\My Documents\査読\*'
]
```
#### C:\Download\music の設定ファイル
```toml
# こういう書き方もできる? 保留!
extension = [
"mp3",
"wav",
"mp4"
]
destination = [
"C:\\Dropbox\\音楽\\*",
"C:\\My Music\\*"
]
```