Pythonで画像をリサイズ

Python No Comments »

複数のディレクトリに入ってる画像をリサイズして連番で保存するPythonスクリプトです。

t = 0の時は本番。t = 1でテスト。少ない画像で試す。
ディレクトリのリストは直書きしてます。少なかったし、順番を正確に指定したかったので。
元画像の拡張子は「.jpg」や「.jpeg」も候補として含めたかったけどやり方がわからなかった&今回は「.JPG」しかなかったので「.JPG」限定です。
glob.glob(dir)でソート指定する方法ないのかな。ファイルのリスト作った後にソートかけてます。
2種類のサイズの画像を生成しています。横480と横143。縦はauto指定したかったけどやり方がわからなかった。thumbnailでは縦横指定したサイズに収まるようにリサイズしてくれるようなので、縦は適当に大きい数字を指定。
保存するファイル名は1.jpg, 2.jpg, 3.jpg, ...です。
どのファイルが何というファイルになったかわからなくならないよう、log.txt にCSV形式でログを残してます。
% ./image_process.py を実行後、進捗がわかるように print n, f してます。

Pythonでパスからファイル名を取り出す方法

Python, dev No Comments »

Pythonでパスからファイル名を取り出す方法メモ。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import os
 
filepath = '/path/to/file.name'
filename = os.path.basename(filepath) # file.name

このサイトを参考にした。
ファイルをアップロードするための Python CGI スクリプト

genshiでCDATA書いたら消えた

Python No Comments »

テンプレートファイルにCDATA書いたのに吐き出されたHTMLファイルでは消えてた。
index.tmpl

 
    <script type="text/javascript">
    < ![CDATA[
      swfobject.registerObject("swfobj", "9.0.0", "menu.swf");
    ]]>
    </script>
 


index.html

 
    <script type="text/javascript">
 
      swfobject.registerObject("swfobj", "9.0.0", "menu.swf");
 
    </script>
 

追記(2008/10/17 14:04)--
render("html")と書いてたのを
render("xhtml")にしたら消えなかった。
に変換されてたのも解消された。

Djangoのテンプレートでつまづき中

Python No Comments »

Djangoのテンプレートでfor文中で3回に1度だけ文字列を出力したい。

 
{% for item in items %}
  {{ item.name }},
  {# 3つ出力して改行入れたい #}
{% endfor %}
 
 
{% for item in items %}
  {{ item.name }},
  {% ifequal forloop.counter%3 0 %}{% endifequal %}
{% endfor %}
 

こんなんじゃダメなのかな。動いてない気がする。@GAE。
↑preタグ内の<br />が消えてる。。

Pythonことはじめ #8

Python No Comments »

Instant Hacking
練習2の"ユークリッドの互除法によって2個の数の最大公約数を求める関数を書きなさい。"をやってみた。

#!C:\\Python25\\python.exe
 
def hcd(a,b):
    if(a&lt;b):
        a, b = b, a
 
    while b != 0:
        a, b = b, a % b
 
    return a
 
print hcd(20,12)

解答例はこう↓だった。"aはbより大きいものとする。"そうか。ifあたり不要だった。whileの条件には"!=0"とか要らなかったか。0はFALSEってことなんだっけ。

def euclid(a,b):
    while b:
        a,b = b,a % b
    return a

Jython

Python No Comments »

Jython は Python、Java の初心者が触れてもいいものだろうか。
まったく理解できる気がしないな。出直す。ひとまずPythonの勉強をする。
Jythonプログラミングとか買うとしたら数年後。

Pythonことはじめ #7

Python No Comments »

DBをアップデートする。

入力画面text.htmlのソース:

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"&gt;
  &lt;head&gt;
    &lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8" /&gt;
    &lt;title/&gt;Form&lt;/title&gt;
  &lt;/head/&gt;
  &lt;body/&gt;
    &lt;form action="./form.py" method="post"&gt;
      &lt;p&gt;
        &lt;input type="text" value="" name="text" /&gt;
        &lt;input type="submit" value="submit" /&gt;
      &lt;/p&gt;
    &lt;/form&gt;
  &lt;/body&gt;
&lt;/html&gt;

submitした後の画面form.pyのソース:

#!C:\\Python25\\python.exe
# -*- coding: utf-8 -*-
 
import cgi
import MySQLdb
 
form_data = cgi.FieldStorage()
text = form_data.getfirst("text")
 
con = MySQLdb.connect(db="test", host="localhost", port=3306, user="testuser", passwd="********")
cur = con.cursor()
cur.execute('update pytest set body="%s" where title="%s"' % (text,"test"))
cur.close()
con.close()
 
html_head = '''&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8" /&gt;
&lt;title&gt;Pythonことはじめ&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;'''
 
html_foot = '''&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;'''
 
print "Content-Type: text/html\\n\\n"
print html_head
print text
print "と書き込みました"
print html_foot

dddと書いてsubmitしたら、dddと書き込みましたと表示された。
pytestのtitleがtestのレコードはbodyがdddに変更された。OK。

Pythonことはじめ #6

Python No Comments »

DBに格納されたデータを参照してみる。

testというDBにpytestというテーブルを作成して、
|title|body|
|test|aaa|
というデータを格納。

index.py:

#!C:\\Python25\\python.exe
# -*- coding: utf-8 -*-
 
import MySQLdb
con = MySQLdb.connect(db="test", host="localhost", port=3306, user="testuser", passwd="********")
cur = con.cursor()
 
s = "SELECT title, body FROM pytest"
cur.execute(s)
r = cur.fetchone()
 
print "Content-type:text/html\n\n"
print "&lt;!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Strict//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\"&gt;"
print "&lt;html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ja\" lang=\"ja\"&gt;"
print "&lt;head&gt;"
print "&lt;meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" /&gt;"
print "&lt;title&gt;Pythonことはじめ&lt;/title&gt;"
print "&lt;/head&gt;"
print "&lt;body&gt;"
print "&lt;p&gt;"
 
while r != None:
  print "%-10s | %-40s" % r
  r = cur.fetchone()
 
print "&lt;/p&gt;"
print "&lt;/body&gt;"
print "&lt;/html&gt;"
 
cur.close()
con.close()

ブラウザから確認すると、test|aaa と表示された。○。

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と同等かな。

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。

Powered by WordPress | WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in