「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【Json】curlコマンドをPython Requests に変換できるツールがチートすぎた

curl.trillworks.com


Pythonスクレイピングに関する記事で、Jsonファイルを扱う記事をよく見かけますが、”ヘッダー”やら”ゲット”やら”ポスト”やら”パラメーター”やら。。

や!その情報どこから持ってくるの!?

Chromeディベロッパーツールのネットワークからだよー」と言われましても。。

や!どの部分!!??

f:id:At_sashimi_py:20190404135503p:plain

熟練の方々からしたら何言ってんねんっという話かもしれませんが、Json ファイルの存在に気が付きながらも、そのファイルを取ってくることがどうしてもできず、
苦肉の策でSelenium + Beautiful soup 何ページにも渡って力技でデータを取ってくるなんてこともあったするみたいです。(実話)4000秒掛かった笑


そんな時会社の先輩が教えてくれたこのサイト
curl.trillworks.com

f:id:At_sashimi_py:20190404141504p:plain
自動でRequestsのフォーマットに変換

え!チート!?こちとらあんなに悩んでたのに!

「や、でもそもそもそのcurlコマンドどこから持ってくるの?」とういう私と同じ疑問を抱いた方、ご安心を。

ネットワークタブのここから簡単にコピペできます!

f:id:At_sashimi_py:20190404142100p:plain
ネットワークタブからのコピーからのコピーcURL



あとはこのまま他のJsonチュートリアルを参考にして、コードにはめ込むだけ!笑
(dataのところをstringに変えてあげる必要があるかもしれません)


これでJson ファイル周りの仕事で困ることが減りそう。

世の中の頭のいい人たちに感謝!

【HackerRankを解きつつ学ぶシリーズ】python 初心者のためのcapitalize() とsplit() と時々strip()

【HackerRank】とはプログラミング問題を解決することでプログラマーとしてのスキルをスコア化できる楽しいサイト(求人)である。
*求人サイトということを忘れてパズルを解くように楽しめるので個人的にオススメ。(問題は全て英語)
www.hackerrank.com

ちなみにここで紹介される解き方が最適解とは限らないのでご了承くださいませ!

今回扱う問題は。。。

タイトル

Capitalize!

概要

与えられた氏名それぞれの頭文字を大文字にしなさいという問題。
例えば
alison heck」という氏名が与えられた場合

Alison Heck」と返ってくるようにしてね!
という問題。

基本情報

インプットフォーマット

  • フルネームを一つの文字列で 。

制限

  • インプットされるフルネームはアルファベットで且つスペースも含む。
  • 大文字になるのは単語それぞれの頭文字だけ。


アウトプットフォーマット

  • 大文字化された文字列をprintで表示

インプット例

アウトプット例

capitalize() とsplit()

問題のタイトル通り、単純に考えるとcapitalize()使えばできそうな問題ですが、ただ単純に

def solve(s):
    s.capitalize()
    return s

としてしまうと、
返ってくるのは

Chris alan

alan!?

そこはAlanであって欲しかった!
なぜこうなってしまったかというと

capitalize()は先頭の一文字を大文字にした上で他の文字を小文字にする !

からで
つまり「chris alan」を二つの文字列に分けなければならない。

そこで
split()を使用します。

split()は文字列を任意の文字で区切り、分割された文字列のリストを返す!

つまり今回の例では
chris alan
chrisとalanは' '(スペース)で区切られているので、
s.split(' ')のようにかっこの中に' '(スペース)をあてがいます。
(もし与えられている文字列がスペースでなく「chris,alan」のように','(コンマ)で区切られていた場合はsplit(',')となります)
そうすることでスペース部分でで区切った[chris, alan]というリストを作ることができました。
そしてfor ループで、chris, alanそれぞれをcapitalize()すればオッケー。

*解答例は最後の方にひっそりと残しておきます。

その他もろもろ

今回使ったcapitalize()の他にも

lower(): すべての文字を小文字に

str = "Python is the best"
print(str.lower())
# python is the best

upper(): すべての文字を大文字に

str = "Python is the best"
print(str.upper())
# PYTHON IS THE BEST

swapcase(): 大文字を小文字に、小文字を大文字に

str = "pYthon iS tHe BesT"
print(str.swapcase())
# PyTHON Is ThE bESt

title(): 単語の先頭の一文字を大文字、他を小文字に (←んんっ!?)

str = "Python is the best"
print(str.title())
# Python Is The Best

や、この問題title()で一発やん!?笑
ただなぜかHackerRankでは通りませんでした。。。なぜ(わかる方いらっしゃいましたら是非ご教授ください!)


では皆様の良きHacker Life を祈っております!


解答例

def solve(s):
    name = ''
    for i in s.split(' '):
        name += i.capitalize() + ' '
    return name.strip(' ')

返ってくる文字列の最後のスペースを消すためにstrip(' ')使用。(もっといい方法ありそー!)

【Python初心者必見】Pythonの辞書型の超基礎。追加!検索!削除!を一気に感覚とイメージで掴む〜今後ググる必要が無くなりますように〜

このタイトルは自分への戒めです。

このブログを始める最大のキッカケとも言える

Python

今や、AI やら、機械学習やら、ディープラーニングやらで近年巷でやたら熱い言語。
シンプルかつパワフルな言語でプログラム初心者にも取っつきやすい。

と言うことで、ペチペチPythonスクリプトを仕事で書いたり、趣味で書いたりしているわけですが、

同じことを何度も調べているんですね。

学びなさいよ。いい加減!

と言うことで基本に立ち返りながら
よく調べることをここに噛み砕きまくって記します。
(詳しい方々はスルーで!!)

今日は 辞書!!

参ります。

取り敢えずいきなり実例!何事イメージが大切

基本の辞書型

my_pet = {'dog':'pochi', "cat":'mike', "bird":'pi-chan'}
name = my_pet['dog']
print (name)

#↓↓↓↓結果↓↓↓↓↓
#pochi

初めての方はここで何が起きてるか想像してみよう。
まず最初の行
このふにゃってるこれは!?
'{ }' ←?!

その中で、ドッグやらポチやらが ’:’(コロン) で区切られている

さらにそれらのペアを区切る点 ’ , ’

そして

name = mydict['dog']
print (name)

今度は'[ ]'を使って
で、その結果が

pochi

ポチ!!

勘のいい方ならここで何が起きているのか既にお気づきだろう。

「きっと一行目のふにゃふにゃ括弧が辞書を構成する為に大事なモノなんだろうなー

おそらく、コロンの前後で対になってるんだろうなー

そしてその辞書の中の複数のペアを区切るのがの役割なんだろうなー

そして二行目とと三行目の関係性から考えて、コロンの手前を'[ ]'に入れることによって後のものを呼び出せるのかなー」…と

辞書の基本イメージはだいたいこんな感じ。

実際に辞書を作ってみる

make_pet = {}
make_pet['dog'] = 'taro'
print (my_pet)
#↓↓↓↓結果↓↓↓↓↓
#{'dog': 'taro'}  できた!
make_pet = {}
make_pet['dog'] = 'taro'
make_pet['pig'] = 'boo'
print (my_pet)
#↓↓↓↓結果↓↓↓↓↓
#{'dog': 'taro', 'pig': 'boo'}  追加された!!

お分りいただけただろうか。
最初にふにゃふにゃ括弧のみをタイプすることによって空の辞書が生成され、二行目でこの辞書の'dog'は 'taro' だよーと記入する。
そうすることで

{'dog': 'taro'}

と言う中身のある辞書に早変わり!
また、
犬だけじゃ無くて豚さんも仲間に入れてあげたいーと言うときは、
以前コロンの後のものを呼び出したときに使った'[]'をまた使って

make_pet['pig'] = 'boo' #adding pig to make_pat

たったこれだけで

{'dog': 'taro', 'pig': 'boo'} 

無事豚さんもペットの一員になりました。


だんだんイメージが掴めてきたのではないだろうか。

作った後は色々いじってみる!!

こちらに用意した辞書は架空のテストの成績

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}
a = test_score.keys()
b = test_score.values()
print (a)
print (b)
#↓↓↓↓結果↓↓↓↓↓
# dict_keys(['math', 'sci', 'music', 'English', 'history'])
# dict_values([80, 68, 79, 65, 82])

何やらValuesやら、 Keysやらを使ってコロンの前と後ろで分別されている。そんなこともできるんですね!

そもそもValueKeyとはなんなのか!?

辞書にまつわるメソッドたち

keysメソッドとvaluesメソッド

先にイメージを膨らませる為にあえてすっ飛ばした大事なこと。

それがValueKey

そもそも辞書(dictionary)型とは、あのふにゃにゃ括弧'{}'の中にValueKeyの組み合わせがあのコロン':'によって区切られた形で含まれているデータのこと。そのペアが複数ある場合あの点','で仕切りを付けていくと言う流れ。

つまり先ほどの例でいう所の

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}
#               |    |
#Key____________|    |
#Value_______________|

これを理解した上で、先ほどのテスト成績の例をもう一度みてみると、

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}
a = test_score.keys()
b = test_score.values()
print (a)
print (b)
#↓↓↓↓結果↓↓↓↓↓
# dict_keys(['math', 'sci', 'music', 'English', 'history'])
# dict_values([80, 68, 79, 65, 82])

この部分に注目

a = test_score.keys() 
b = test_score.values()
#.key() と .values()が大事っぽい!

そしてそれらをprintすると

print (a)
print (b)
#↓↓↓↓結果↓↓↓↓↓
# dict_keys(['math', 'sci', 'music', 'English', 'history'])
# dict_values([80, 68, 79, 65, 82])

こうすることでvalueと keyに何が含まれているか分りますね!
ちなみに.key() と .values()のことを順番にkeysメソッド、valuesメソッドと呼ぶらしい

keysメソッド、valuesメソッドを使って検索!

例えば

あれ?辞書の中に'japanses'入ってたっけ?

そんなときはkeysメソッドを使って python に直接聞くのが一番!

a = test_score.keys()
print ('math' in a) #a のなかに'math'ありますかー?
print ('japanese' in a) #a のなかに'japanese'ありますかー?

#↓↓↓↓結果↓↓↓↓↓
#True 'math' あるよー
#False 'japanese'はないよー

とこのような形でkeysメソッド'in'を使うことで
keysの中に'math' と 'japanese'の有無を

'True'

または

'False'

と素っ気なく教えてくれる。

逆もまた然りでvaluesメソッド'in'value中身

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}


a = test_score.keys()
b = test_score.values()
print (100 in b)
print (80 in b)

#↓↓↓↓結果↓↓↓↓↓
#False #100点はないね。残念!
#True #でも80点はあったよ。よくやったね!

popメソッド、clearメソッド

上記と同じ辞書で英語の成績が低くてこの辞書から抹消したい時に便利なのが

popメソッド

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}

test_score.pop('English')
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{'math': 80, 'sci': 68, 'music': 79, 'history': 82}
#No more English!!

そして英語だけじゃ無く、もう金輪際成績の話はしたくないというあなたに

clearメソッド

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}

test_score.clear()
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{} 
#全てclear!で空の辞書が返ってきます。

辞書に新たな要素を足すsetdefaultメソッド!(個人的にはあまり使わないけど。。

test_score = {'math':80, 'sci':68, 'music':79, 'English':65, 'history':82}

test_score.setdefault('business',90)
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{'math': 80, 'sci': 68, 'music': 79, 'English': 65, 'history': 82, 'business': 90}

とsetdefaultメソッドでbusinessと90が対になるように辞書に追加してみました。

んーなるほど、

test_score.setdefault('business',90)

setdefaultメソッドはkeyとなるものとvalueになるものの二つの引数をとるのか。。

だったら

test_score['business'] = 90
print(test_score)

#↓↓↓↓結果↓↓↓↓↓
#{'math': 80, 'sci': 68, 'music': 79, 'English': 65, 'history': 82, 'business': 90}

と、既出の例で足したやり方の方がタイプ数少ないし個人的に好き。

最後にとりあえず覚えておこうリスト

辞書を作る際に必要なものは

  • ふにゃにゃ括弧'{ }'
  • コロン':'
  • key(コロンの手前)
  • value(コロンの後)
  • 要素が複数ある場合は点','で区切る

よく使うメソッド

  • keyを使ってvalueへアクセス
  • 辞書の中身を検索する時はkeysメソッドvaluesメソッド
  • 辞書の中身を消したい時はpopメソッドclearメソッド
  • 辞書に何か足したい時はsetdefaultメソッドもしくは'[ ]'を用いて。。括弧の中にkey「=」の右にvalue(個人的に後者の方が一般的な気が)

終わりに

基本に立ち返るとか言っといて結局ぼんやりとイメージ重視な内容に落ち着きました。

でもなんと無くこれで辞書の基本とイメージがつかめた人が一人でもいれば。。

ということで今日のところは

以上!





(これで毎回Google先生に聞く日々とはおさらば!ではないかな笑)

「アウトプットと言う名の備忘録」始めました

 お題の通り、そうすることにしました。

 

「何度同じこと調べたら気がすむねん!」

 

と言う自身への憤りが動機でした。

 

主に自分の為に書き留めます。

 

その過程で何処かの誰かのお役に立てれば。。。

 

以上。今日はここまで!