python-cgi 複数行テキストを受け取って操作する コード全文

Python活用

HTMLの複数行テキストボックスから受け取ったテキストを行ごとにリスト化して処理するコード例を紹介します。
このコードは実際にサーバーに設置しているものです。
こちらのページでさくらのレンタルサーバーでの動作を実際に見ることができます。
文法的な解説はこちらのページで行っています。

呼び出し側HTML

<html>
  <head>
    <meta charset=utf-8>
    <title>Sample</title>
  </head>
  <body>
    <form action=/it/python/txt/cast.cgi method=post>
     <p><textarea id="copyTarget" name="text" cols="44" rows="10" wrap="off">Hello World
Hello World
Hello World</textarea></p>
     <p><button name="button" value="kon">送信</button></p>
    </form>
  </body>
</html>

cgiのコード

#!/usr/local/bin/python
#coding: utf-8
import cgi,sys,io

form = cgi.FieldStorage()
text = form.getvalue('text', '')      #複数行テキストボックス(textarea)の値
button = form.getvalue('button', '')  #ボタンの値

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

if button == "kon":  #if文の最後の:を忘れないこと
    aisatsu="Hello こんにちは"            #ブロック内はスペース4個インデントする ブロック内に空白行を入れない
else:                   #elseの後の:を忘れないこと
    aisatsu="Hello"

print('Content-Type: text/html; charset=UTF-8\n')

print("実行結果<BR>")

stringlist = text.split("\n")  #複数行テキストボックスの内容を行ごとに配列化(改行記号で区分けする)

print("stringlist = ")
print(stringlist)
print("<BR>")

index=[]                      #配列の宣言
for line in stringlist:       #stringlistの要素数だけforループ  lineには都度stringlistの各要素の文字列が入る  最後の:を忘れないこと
    if line[0:5]=="Hello":    #最初の5文字で判定 
        line=line.replace("Hello",aisatsu)    #.replace で置換された文字列を与える 代入文にしないとlineの値は変化しないので注意
    index.append(line)                        #.append で配列要素を追加する
 
print("index = ")
print(index)
print("<BR>")

array=[] 
for i in range(len(index)):         #indexの要素数だけforループ  今何行目か知る必要があるときに使う  range(len()) で0から最後までという意味
    str = index[i]
    if "Hello " in str and i > 0:   #その文字が含まれているかを in で判定する
        str = str[6:]               #6文字目までを削除
    if not i == 2:                  #not == は != にしても同じ
        array.append(str)

print("array = ")
print(array)
print("<BR>")

#ここより上のprint()は、本番ではコメントアウトする(頭に#を付ける)
#要所要所にprint()を入れておくとエラーの発生カ所を特定しやすい


#出力するHTML

html_body1 = """
<!DOCTYPE html>
<html><meta charset="UTF-8" >
<head>
<title>python cgi sample</title>
</head><body><P><H3>実行結果</H3></P><p><textarea id="copyTarget" wrap="off"  rows="10" cols="44">"""


html_body2 = """
    </textarea></p>
    <!-- コピー対象要素とコピーボタン -->
    <button onclick="copyToClipboard()">コピー</button>
    <script>
        function copyToClipboard() {
            // コピー対象をJavaScript上で変数として定義する
            var copyTarget = document.getElementById("copyTarget");

            // コピー対象のテキストを選択する
            copyTarget.select();

            // 選択しているテキストをクリップボードにコピーする
            document.execCommand("コピー");

        }
    </script>

</body>
</html>
"""

print(html_body1)

for line in array:
    print(line) 

print(html_body2)
タイトルとURLをコピーしました