Pythonことはじめ #5

Python No Comments »

ファイルを読み込んで表示。

Python でファイルを読む
を参考に。

f = open('text.txt', 'r')

for line in f:
    print line,

f.close()

サンプルコードそのまま。

text.txt:

watashi wa dododo

watashi wa dododo
と表示された。OK。

続いて、タブ区切りのファイルを。

text.txt:

watashi	wa	dododo
anata	wa	gogogo
for line in open('text.txt', 'r'):
    name, zip, address = line[:-1].split('t')
    print name
    print "<br />"
    print zip
    print "<br />"
    print address
    print "<br />"
    print "<br />"

全然、名前/郵便番号/住所 じゃありませんが。。

watashi
wa
dododo

anata
wa
gogogo

と表示されたOK。
line[:-1] は、lineの最後に入っている改行コード '\n' を取り除きます。
とのこと。Perlのchompと同等かな。

Hello Haskell

dev No Comments »

唐突にHaskellの話。

Windows環境で動かしたい。下記URLからghc-6.8.2-i386-windows.exeをダウンロードして実行。
http://haskell.org/ghc/download_ghc_682.html#windows

[> next]などクリックしておく。Finishとかでた。

httpd.conf のAddHandler cgi-scriptに.hsを足してApacheを再起動。
index.hsを作成してみる。しようとしたら、どうHello Worldを書いていいかわからない。

Fedora6にGHCをインストール - Problems

によるとputStrLn "Hello World"でよさそうだ。

#!C:\ghc\ghc-6.8.2\?????

putStrLn "Content-type:text/html\n\n"
putStrLn "HelloWorld"

??????にいろいろ書いて試してみてるけど
エラー出たり、真っ白だったり。
後でログ見る。

一方Ubuntuの方でも試してみた。また
Fedora6にGHCをインストール - Problems
を参考に、

$ wget http://www.haskell.org/ghc/dist/6.8.2/ghc-6.8.2-i386-unknown-linux.tar.bz2
$ tar xvfj ghc-6.8.2-i386-unknown-linux.tar.bz2
$ cd ghc-6.8.2
$ ./configure
$ sudo make install

して、特に問題なく入れられたっぽい。

$ ghci
とやると
/usr/local/lib/ghc-6.8.2/ghc-6.8.2: error while loading shared libraries: libreadline.so.4: cannot open shared object file: No such file or directory

とか言われるのでlibreadline.so.4とかでググって調査中。

Pythonことはじめ #4

Python No Comments »

なにかテンプレートエンジンをいじってみたくなったので探してみたらGenshiってのがちょっと気になったので触ってみる。

参考:

ブラウザで
http://ftp.edgewall.com/pub/genshi/Genshi-0.4.2.tar.gz
にアクセスしてDL。
解凍。
Genshi-0.4.2というフォルダができる。
その中のgenshiフォルダをgenshi-test.pyと同じ階層に置く。

genshi-test.py:

#!C:\Python25\python.exe
# -*- coding: utf8 -*-

def main():
    print "Content-Type:text/html\n\n",
    import cgi
    from genshi.template import TemplateLoader
    from genshi.template import MarkupTemplate
    import os
    TEMPLATE_DIR = "./"
    loader = TemplateLoader(TEMPLATE_DIR)
    tmpl = loader.load('genshi-tmpl.html')
    myList = [u'焼肉',u'寿司',u'手羽先']
    stream = tmpl.generate(myH1 = u"好きな食べ物", myList = myList)
    html = stream.render("html")
    print html
if __name__=='__main__':
    main()

genshi-test.pyと同じ階層にテンプレートファイルgenshi-tmpl.htmlを置く。
genshi-tmpl.html:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" lang="ja">
  <head>
    <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=UTF-8" />
    <title>genshi</title>
  </head>
  <body>
    <h1 py:content="myH1">hogefuga</h1>
    <ol>
      <li py:for="item in myList">${item}</li>
    </ol>
  </body>
</html>

ブラウザからgenshi-test.pyにアクセスすると

好きな食べ物

1. 焼肉
2. 寿司
3. 手羽先

と表示。おk。

Pythonことはじめ #3

Python No Comments »

関数を書いてみる

#!C:\Python25\python.exe
# -*- coding: utf-8 -*-

def Say(x):
    return x * 2

print "Content-type:text/html\n\n"
print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ja\" lang=\"ja\">"
print "<head>"
print "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />"
print "<title>Pythonことはじめ</title>"
print "</head>"
print "<body>"
print "<p>"

print Say("ho!")
print Say("こんにちは")

print "</p>"
print "</body>"
print "</html>"

ho!ho! こんにちはこんにちは
と表示された。おk。

繰り返しの回数を指定できるようにする

パラメータを2つ渡すように変更。

def Say(x,y):
    return x * y

として

print Say("ho!",2)
print Say("こんにちは",3)

ho!ho! こんにちはこんにちはこんにちは
と表示された。

2つ目のパラメータとして文字列を渡してみる

こんにちは * fugaa とか、数字じゃないものを掛けるとどうなるかな。

print Say("ho!",2)
print Say("こんにちは","fuga")

としてみたら

ho!ho!
だけが表示された。

関数を使って変数をいじってみる

def Say(x,y):
    return x * y

def Say(x,y):
    word = x * y
    return word

と変えてみた。表示されるものに特に変化なし。

word = ""

def Say(x,y):
    word = x * y

として

Say("hello",2)
print word

でhellohelloと表示されるのを期待したけど

None
と表示される

word = ""

def Say(x,y):
    global word
    word = x * y

とすることでhellohelloが表示されるようになった。
グローバル変数ってやつですね。グローバル変数はあんまり使わない方がいいよ、ですかね。

Pythonことはじめ #2

Python No Comments »

importしてみる

import 使ってみた。

#!C:\Python25\python.exe
# -*- coding: utf-8 -*-
print "Content-type:text-html\n\n"
import Hello

Hello.py を同じ階層に作成。(内容は下記)

print "KonNichiHa!"

ブラウザから確認。おk。

importするファイルがない時、以降の処理は行われない

#!C:\Python25\python.exe
# -*- coding: utf-8 -*-
print "Content-type:text-html\n\n"
print "dododo\n"
import Hello
print "yoyoyo\n"

と変更して

Hello.py を同じ階層から別の場所へ移動。
それでも普通に見える。Hello.pycを同じ階層から別の場所へ移動。

dododoだけが表示されてる。
importするファイルがない場合、以降の処理が行われないらしい。

importされるファイルに日本語が含まれる場合

Hello.py を元の階層に戻して

print "こんにちは"

と変更。

dododoだけが表示されてる。
Hello.pyにも

# -*- coding: utf-8 -*-

を足してあげる必要があるかな。

Hello.py

# -*- coding: utf-8 -*-
print "こんにちは"

dododo こんにちは yoyoyo と表示された。よかった。
importされるファイルの方で日本語を使うときはそのファイルでエンコードの指定が必要なのかな。

ただ、下記のように前後のdododo/yoyoyoを消すと文字化けた。

#!C:\Python25\python.exe
# -*- coding: utf-8 -*-
print "Content-type:text-html\n\n"
import Hello

ブラウザが文字コード判定を間違えてるのかしら。
Fxの場合:表示>文字エンコーディング>Unicode (UTF-8)
すると"こんにちは"がちゃんと表示される。ふーむ。。

Pythonことはじめ

Python No Comments »

PythonのWindowsPCへのインストールなどずいぶん前にやったのでやり方など忘れちゃってるけど、覚えてる範囲で書く。

  1. Pythonダウンロード、インストール(リンク省略)
  2. 環境変数に追加(追加方法省略)
  3. xamppのhttpd.conf の cgi なんとかってところに .cgi の後に 半角スペース+.pyを書き足し(xamppじゃなくても同様のことが必要だと思う)
  4. apache再起動
  5. サンプルファイル作成
  6. ブラウザから確認→ふむOK

と、最後うまくいく予定だったんだけどいかなかった。

サンプルはこんな。
python.exeをどこに置いたかによって1行目変わってくる。

#!C:\Python25\python.exe
print "Hello"

malformed header from script. Bad header
とか言われる。。

Perlでも同じようなことやったことあったので

print "Hello"

よりも前に

print "Content-type:text/html\n\n"

を入れる。

#!C:\Python25\python.exe
print "Content-type:text/html\n\n"
print "Hello"

おk。Helloがブラウザから確認できた。
次はHTML書いてみたくなる。

#!C:\Python25\python.exe
print "Content-type:text/html\n\n"
print "<html>\n"
print "<head>\n"
print "<title>あああ</title>\n"
print "</head>\n"
print "<body>\n"
print "Hello\n"
print "</body>\n"
print "</html>\n"

Premature end of script headers
とか言われる。

コードを削ったりして試してみると

print "<title>あああ</title>\n"

がNGぽい。

print "<title>aaa</title>\n"

に変更すると解消。

日本語がダメだったらしい。

# -*- coding: utf-8 -*-

#!C:\Python25\python.exe

の次の行に入れると(サンプルファイルはUTF-8で作ってる)

print "<title>あああ</title>\n"

でもエラー出ないようになった。

しかし、Pythonと関係ないけど、WordPressでコレ書いてるけど
¥(←これの半角の方)が、¥¥と書かないと表示されない。
¥¥nと書かないと¥nと表示できないのは非常にめんどくさい。
プラグインあるんだろうな。探さなきゃな。

はてなとかどうなのかな。スーパープレっ!!!とか言っとけばおkなのかな。

IEでlist-style-typeで指定したものが表示されない

css No Comments »

なぜかIEでliの「・」が表示できない。リストのポチ。
結論から言うと、float指定してあるliに対しては「・」が表示されないみたい。

li {
  float:none;
}

してあげればおk。デフォルトではこうなってるから、いつのまにかfloatが指定されちゃってる状況ってあんまりなさそうだけど。横に箱を並べてそれぞれの箱の中にリストを表示するもの(↓テーブルで再現)、今回コレでやってしまった。

・リスト1の1
・リスト1の2
・リスト1の3
・リスト2の1
・リスト2の2
・リスト2の3
・リスト3の1
・リスト3の2
・リスト3の3

こんなHTML書いて、

<ul>
  <li>
    <ul>
      <li>リスト1の1</li>
      <li>リスト1の2</li>
      <li>リスト1の3</li>
    </ul>
  </li>
  <li>
    <ul>
      <li>リスト2の1</li>
      <li>リスト2の2</li>
      <li>リスト2の3</li>
    </ul>
  </li>
  <li>
    <ul>
      <li>リスト3の1</li>
      <li>リスト3の2</li>
      <li>リスト3の3</li>
    </ul>
  </li>
</ul>

CSSにはこんな風にlist-style-type指定してがんばって「・」を表示させようとするが、IEだと表示されない。

li {
  float:left;
  width:200px;
  list-style-type:none;
}

li li {
  list-style-type:disc;
}

li の孫の li にも float:left; が効いちゃってるので float:none; を足してあげる。すると表示された。

li {
  float:left;
  width:200px;
  list-style-type:none;
}

li li {
  list-style-type:disc;
  float:none;
}
Powered by WordPress | WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン