Open4
Python イディオム
dataclass を辞書から作るときに不要なフィールドを廃棄する
from dataclasses import fields, dataclass
@dataclass
class A:
foo: int
@classmethod
def from_dict(cls, d):
return cls(*(d[f.name] for f in fields(cls)))
a = A.from_dict({"foo": 1, "bar": 2})
# bar は廃棄され、 foo のみ格納される。
参考
ネストした dataclass を辞書に変換する
from dataclasses import dataclass, asdict
class Child:
name: str
class Parent:
child: Child
def to_dict(self):
return asdict(self, dict_factory=lambda d: dict(x for x in d if x[1] is not None))
parent = Parent(child=Child(name="Taro"))
parent.to_dict()
# {"child": {"name": "Taro"}}
Pandas で JSON と JSONLines(改行区切り)両方の読み込みに対応する
from pathlib import Path
import pandas as pd
json_path: Path
# 拡張子が .jsonl, jsonlines の場合のみ lines=True になる
pd.read_json(json_path, lines="jsonl" in json_path.suffix)
テキストファイルの各行を list に保存
with open("your/file.txt") as f:
lines = [l.rstrip("\n") for l in f]
lines = f.readlines()
だと各行末尾に \n
が付いてしまう。