Python

python 自分用メモr4 jsonファイルで英単語辞書

実行環境

  • MacBook Air (11-inch, Mid 2012)
  • JupyterLab (from Anaconda)
  • Python 3.6.4

まえがき

jsonファイルをつかって辞書を作成した。
jsonとは? A. Javascript Object Notationの略。テキストデータ。
Qiitaは画像しかアップロードできないんすねぇ。

教材

https://www.udemy.com/the-python-mega-course/learn/v4/content

英単語辞書

英単語のjsonファイル
https://github.com/pipinstallbadapple330/file

import json
from difflib import get_close_matches

data = json.load(open("data.json"))

def interact_with_json():
    try:
        key = input("Enter Word: ").lower()
    except:
        pass
    if key in data:
        return [key] + data[key]
    elif key.capitalize() in data:
        return [key.capitalize()] +  data[key.capitalize()]
    elif key.upper() in data:
        return [key.upper()] + data[key.upper()]
    else:
        return close_match(key, data)

def close_match(key, data):
    match=get_close_matches(key, data.keys(), n=10)
    if not match:
        return "Not in Dictonary, please spell check"
    if input(f"Do you mean {match[0]}?: y or n")[:1].lower()== "y":
        return [match[0]] + data[match[0]]
    else:
        print("Similar word list")
        for i in range(len(match)):
            print(f"{i+1}. ",match[i])
        while True:
            try:
                rq = int(input("Type number you want, or Type any other number to stop"))
                if 1 <= rq <= 10:
                    return [match[rq-1]] + data[match[rq-1]]
                else:
                    return "Not in Dictonary, please spell check"
            except:
                print("Number please")
                continue


if __name__ == "__main__":
    print("Welcome to English dictonary")
    output = interact_with_json()
    if type(output) == list:
        print(output[0])
        n = 1
        for m in output[1:]:
            print(f"{n}.",m)
            n += 1
    else:
        print(output)
  1. 先頭のみ大文字(America)。全部大文字(NATO)。小文字(rain)などの英単語を含むjsonファイルを使用。
  2. difflibライブラリーのget_close_methodで誤差率60%以内の単語を提案するような仕様。

jsonファイルの作成

any_dictionary = {"C": "\u3042", "A": {"i": 1, "j": 2}, "B": [{"X": 1, "Y": 10}, {"X": 2, "Y": 20}]} #1
convert_to_string = str(any_dictionary)#2
d ='"'.join((s.split("'")))    #3

with open("test.json", "w") as file:
    file.write(d)
  1. jsonファイルに保存するのにデータタイプdictならなんでも保存できそう。
  2. データ型を文字列に変更。f"{dict_name}"だろうと.formatでもなんでもいい。
  3. どうやらdict内部のkeyの文字列に'(シングルコーテーション)を使うとjsonファイルとして扱われない。"(ダブルクオーテーション)を使う必要がある。辞書型を文字列になおすとデフォルトで'が使われているため修正する必要がある。replace("'", '"')だとうまく動かなかった。
  4. with open("file_name") as file:は同じディレクトリのファイルを開く。txt, csv, jsonなどのファイルを読み込んだり、編集したりできる。存在しないfile_nameを渡すと新規作成される。open()でファイルをひらくとclose()する必要がある。基本的にwith open() as ...の形で開くほうが吉。
  5. open()にはいくつかモードがある。w, r, a, +をつけたりつけなかったりできる。詳しくは割愛。help嫁。juypiterlabならメソッドか関数の()の中でshift + tabすると英語の勉強ができる。help(メソッド名or関数名)でもヘルプを開ける。具体的にはhelp(open)

おまけ:ポケモン図鑑

jsonファイルの引用元:
https://github.com/kotofurumiya/pokemon_data

import json
poke = json.load(open("pokemon_data.json"))#list
name = input("名前をカタカナで入力")
for i in poke:
    if i["name"] == name:
        print(i)

そのうちGUIの練習に使う。

あとがき

蚊のかゆいのと、ブーンって音なくしてくれたら共存できる。