はじめに
- apache-beamを触ることになったがそもそもpythonを触ったことがあまりなかった。また似ている名前のメソッドもあり混同しそうだったため、備忘録としてまとめる。
pythonにおける変数のデータ型の確認type
str_data = 'hoge'
# <class 'str'>
print(type(str_data))
bytes_data = b'hoge'
# <class 'bytes'>
print(type(bytes_data))
int_data = 123
# <class 'int'>
print(type(int_data))
float_data = 123.456
# <class 'float'>
print(type(float_data))
dict_data = { "human": "hoge", "age": 23, "address": "shinjuku" }
# <class 'dict'>
print(type(dict_data))
文字列とバイト
str型からbytes型へencode
data = 'hoge'
encoded_data = data.encode()
# b'hoge'
print(encoded_data)
bytes型からstr型へdecode
data = b'hoge'
decoded_data = data.decode()
# hoge
print(decoded_data)
JSONとdict
そもそものjsonとdictの違い
- JSONは「データフォーマット」であり、dictは「python」におけるデータ型
- JSONを扱えるようにする(
json[key_name]
のようにアクセスするためなど)にはそれぞれのプログラミング言語ごと変換が必要- pythonにおいては
dict
型に変換しなければならない - jsだったらparseしてオブジェクト型へ
- pythonにおいては
str型からdict型へ変換loads
import json
data = '{ "name": "hoge", "age": 23, "address": "shinjuku" }'
dicted_data = json.loads(data)
# dict型に変換されているためkeyで抽出できる
# 23
print(dicted_data['age'])
# 以下の場合はエラーになる
# Traceback (most recent call last):
# File "/app/src/loads.py", line 7, in <module>
# print(data['age'])
# TypeError: string indices must be integers
print(data['age'])
dictをJSON(str)へ変換dumps
import json
data = { "human": "hoge", "age": 23, "address": "shinjuku" }
formatted_data = json.dumps(data)
# {"human": "hoge", "age": 23, "address": "shinjuku"}
print(formatted_data)
# <class 'str'>
print(type(formatted_data))
dictをJSONとしてファイルへ保存dump
import json
data = { "name": "hoge", "age": 23, "address": "shinjuku" }
with open('../result/index.json', 'w') as f:
json.dump(data, f, indent=2)
出力結果
{
"name": "hoge",
"age": 23,
"address": "shinjuku"
}
文字列の連結
イテレータの文字列を連結join
- イテレータ...for文で回せるもの
- list
- tuple
- str
- dict
- etc...
# list
list_data = ["f", "u", "g", "a"]
joined_list_data = "".join(list_data)
# fuga
print(joined_list_data)
# tuple
tuple_data = ("a","b","c","d")
joined_tuple_data = "".join(tuple_data)
# abcd
print(joined_tuple_data)
# str
str_data = ("hoge")
joined_str_data = "/".join(str_data)
# h/o/g/e
print(joined_str_data)
# dict
dict_data = { "name": "hige", "age": 23, "address": "shinjuku" }
joined_dict_data = "/".join(dict_data)
# keyのみ結合される
# name/age/address
print(joined_dict_data)
# valueを結合したい場合
dict_data2 = { "name": "higa", "age": 24, "address": "shibuya" }
joined_dict2_data = "/".join(str(value) for value in dict_data2.values())
# higa/24/shibuya
print(joined_dict2_data)
参考