Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python3】cgiからの入力フォームを取り出す方法、inの部分一致でハマった

import cgi
import cgitb
form = cgi.FieldStorage()
print('Content-Type: text/html; charset=UTF-8\n')
でhtmlフォームからの入力を取り出すことができる
すべての入力はformに入っている

printの行はとりあえず書いておく必要があるらしい





python2では
if formdata.has_key("op"):
 op = formdata['op'].value
else:
 print "op not found"
 show()
 sys.exit(1)
みたいにして書いていたらしい
has_key()ってめっちゃ簡単やんと思ってた調べてたけど、古い情報だったらしい

■ 参考 : cgi.FieldStorage() and .has_key() in Python3





同じページにやりたいことが書いてあったけど、

form = cgi.FieldStorage()
if 'hoge' in form:
 val_hoge = form['hoge'].value
みたいな感じでいいらしい

ただここで2時間ほどハマったのが、
formの内容が["hogehoge", "foo"]のときに"hoge"があると判断されてしまうということ・・・

print("hoge" in "hogehoge")
True
↑みたいに in は部分一致かを調べる

先頭の部分が一致してるかどうかを調べるには
import re
で re.match を使えばいいらしい
今回はそのまま in を工夫して使ってトラブル解決した

ランキング参加中です

↓クリックしていただけると嬉しいです〜