ホーム >

Python

virtualenvwrapperを使用したPython開発環境の構築

virtualenvwrapperのインストール手順

virtualenvwrapper自体はpipを使ってグローバルな環境にインストールする。

sudo pip install virtualenvwrapper

次に、.bashrcなどのシェルの初期化スクリプトに以下の内容を追記する。

if which virtualenvwrapper.sh > /dev/null 2> /dev/null;
then
    export WORKON_HOME=$HOME/.virtualenvs
    source `which virtualenvwrapper.sh`
fi

virtualenvwrapperの使い方

  • 利用可能な仮想環境の一覧の確認

    workon
    
  • 新しい仮想環境の作成

    mkvirtualenv <新しい仮想環境の名前>
    

    仮想環境で使用するPythonの実行ファイルのパスを指定する場合

    mkvirtualenv <新しい仮想環境の名前> --python=/usr/local/bin/python
    
  • 仮想環境の有効化

    workon <仮想環境の名前>
    

    プロンプトに現在の仮想環境の名前が表示されるので、どの仮想環境が有効になっているか、一目で確認できる

  • 仮想環境の無効化

    deactivate
    
  • 仮想環境の削除

    rmvirtualenv <仮想環境の名前>
    

radiko・らじるらじるを聴く

radikoの認証手続きにauthkey.pngというファイルが必要であり、このファイルを抽出するのにはswfextractというコマンドが必要。 swfextractはubuntuではswftoolsというパッケージに含まれている。

抽出したauthkey.pngをpython-netradio.pyと同じディレクトリにおいて、python-netradio.pyを実行すれば、radiko・らじるらじるを聴くことができる。

OpenOfficeのスプレッドシートを読む

OpenOfficeのドキュメントの中身はzipアーカイブなので、 Pythonのzipfileライブラリを使えば、それらのファイルの中身を読むことができる。 zipアーカイブは、content.xml・settings.xml・styles.xmlといったXMLファイル等で構成されており、 これらのXMLをパースすることで、OpenOfficeのドキュメントを読むことができる。

以下のサンプルプログラムでは、OpenOfficeのスプレッドシート(拡張子.ods)を読み込んで、 各セルの文字列を含むリストのリストを返す。

import zipfile
from xml.etree import ElementTree

def read_ods(filename):
  def cells2generator(cells):
    for cell in cells:
      repeat = int(cell.attrib.get('{urn:oasis:names:tc:opendocument:xmlns:table:1.0}number-columns-repeated', 1))
      p = cell.find('{urn:oasis:names:tc:opendocument:xmlns:text:1.0}p')
      if p is not None:
        text = p.text
        for i in xrange(repeat):
          yield text
      else:
        for i in xrange(repeat):
          yield ''
  def row2list(row):
    return list(cells2generator(row.findall('{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table-cell')))

  with zipfile.ZipFile(filename, 'r') as ziparchive:
    etree = ElementTree.fromstring(ziparchive.read('content.xml'))
  body  = etree.find('{urn:oasis:names:tc:opendocument:xmlns:office:1.0}body')
  sheet = body.find('{urn:oasis:names:tc:opendocument:xmlns:office:1.0}spreadsheet')
  table = sheet.findall('{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table')[0]
  return [row2list(row)
          for row
          in table.findall('{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table-row')[1:]]

if __name__ == '__main__':
  import sys
  print read_ods(sys.argv[1])

参考URL

ニコニコ動画からflvファイルをダウンロードする

import sys
import urllib
import urllib2
import urlparse
import cookielib
import shutil
from contextlib import nested, closing

def main():
  if len(sys.argv) < 2:
    print 'usage: python %s [video_id]' % __file__
    sys.exit(0)
  email    = 'your email address here'
  password = 'your password here'
  video_id = sys.argv[1]

  # urllib2でCookieを使うために、デフォルトのopenerを変更する
  opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
  urllib2.install_opener(opener)

  # ログインCookieを取得する
  param = urllib.urlencode({'mail':email, 'password':password})
  urllib2.urlopen("https://secure.nicovideo.jp/secure/login", param).close()

  # FLVファイルのURLを取得する
  with closing(urllib2.urlopen('http://www.nicovideo.jp/api/getflv?v=%s' % video_id)) as fin:
    txt = fin.read()
  flv_url = urlparse.parse_qs(txt)['url'][0]

  # 動画ページのCookieを取得する
  urllib2.urlopen('http://www.nicovideo.jp/watch/%s' % video_id).close()

  # 動画をダウンロードする
  flv_filename = '%s.flv' % video_id
  with nested(closing(urllib2.urlopen(flv_url)), open(flv_filename, 'wb')) as (fin, fout):
    shutil.copyfileobj(fin, fout)

if __name__ == '__main__':
  main()

参考URL