Tag: Python

Pythonでバッチ処理をすばやく書く

以前からPythonでバッチ処理を書くことは多くて、書き方の最適解を模索していたのだけどだいたい固まってきたのでメモ。

シェルを叩く

コマンドラインに表示したいときは
subprocess.call(command, shell=True)

コマンドラインに表示したくないときは
log = subprocess.check_output(command,shell=True,stderr=sp.STDOUT)

 

パス名などの環境変数にすばやくアクセスする

クラスを使うと便利。ドットアクセスで記述でき、ローカル変数として取ってくる(後述)のも1行で済むので楽。

 

.format()を使いこなす

シェルに投げるコマンド文を生成するとき、.format(**locals())を使って文字列中に変数を楽に埋め込める。
パス名などの環境変数をグローバルスコープに書いてしまうとlocals()では引っ張ってこれないが、クラスに纏めておけば、そのクラスのインスタンスを一つローカルスコープに宣言するだけでlocals()から引っ張ってこれるので楽ちん。

 

サンプル

以前書いたやつ。1枚絵とオーディオファイルからffmpegを使って動画を自動で作成する。
上記のTipsの書き方参考にどうぞ。
https://gist.github.com/kuguma/d9b0e4ba3324958aa7909b600130ece1

RasPiめも

Satellite CCRMA

・8GBのMicroUSBでは足りない
・Python2系と全てが紐付いているので3を使うのは厳しい.複数のバージョンが入っているがpyenv等は入っていないので気持ちになる.
・x転送の調子が悪い.がんばると動く.
・pdが入っているので便利.しかしgem(動画を扱えるパッケージ)は入っていない.

https://ccrma.stanford.edu/~eberdahl/Satellite/

複数のPythonバージョン

ここの情報が新しいと感じた.しかしanacondaはRasPiには入らない.
http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c

 

音を鳴らす

pygletはAPIが貧弱なので使いづらいと感じた.
pygameは以前扱ったことのあるOpenALに似た使い方ができるので嬉しいが,メンテナンスされていない印象.
(Mercurialのリポジトリは存在してるんだけど,Python3ではpipで入らないしビルドもコケる.)
2ではあっさり動く.2はpipを入れるのが面倒だったりするけどpython-pygameとかがapt-getで落とせるのでそれでお茶を濁せる.

また,mp3を鳴らすのが厳しい.物によって落ちるのでおとなしくwavにするのが良い.

 

USB DACから鳴らす

http://qiita.com/yuyakato/items/76a3d46d1bf57c6a4da6
https://wiki.archlinuxjp.org/index.php/Advanced_Linux_Sound_Architecture#.E3.83.87.E3.83.95.E3.82.A9.E3.83.AB.E3.83.88.E3.82.B5.E3.82.A6.E3.83.B3.E3.83.89.E3.82.AB.E3.83.BC.E3.83.89.E3.81.AE.E8.A8.AD.E5.AE.9A

Python 勉強メモ

matplotlib

http://bicycle1885.hatenablog.com/entry/2014/02/14/023734

 

Numpy.array

http://turbare.net/transl/scipy-lecture-notes/intro/numpy/array_object.html
http://kaiseki-web.lhd.nifs.ac.jp/documents/Python/array.htm

 

Pythonによる信号処理,とかとか

http://aidiary.hatenablog.com/

 

Pythonのスコープ

制御構造はスコープを作らない.
http://d.hatena.ne.jp/saitodevel01/20101205/1291582273

 

True.

 

リスト

[0:4]は”0番目から4番目”ではない.
レンジ指定で取りうる番号は要素と要素の間のカウンタ.従って0([0]の前) ~ 4([4]の後)の5つある.
http://docs.python.jp/2/tutorial/datastructures.html

apt-cygでガバガバになったパッケージを手動でremoveする

手元のpython3.2を3.4に更新しようとremove→installしたが,正しくinstallされず,removeもできなくなった.
既にありますよとか言われてしまう.

 

①removeできないのをなんとかしよう.apt-cygの更新を行った.最新版はgithubから入手.

https://github.com/transcode-open/apt-cyg
解決せず.

②手動でremoveする.

インスール済みのパッケージは(cygwin)\ets\setup\installed.db に記述されているっぽいので,中を見て書き換える.
python3っぽいものをリストから消す.
.db-saveとかいうのもいるけど,これは.dbのバックアップっぽい.

③手動removeできたぞ(ちゃんとパッケージが無いことになってる)

[Prily@ASAGI] $ apt-cyg remove python3                                                [~]
Package python3 is not installed, skipping
 

④install しなおす

[Prily@ASAGI] $ apt-cyg install python3                                               [~]
Installing python3
--2015-05-24 00:16:40--  http://cygwin.cybermirror.org//x86/release/python3/python3-3.4.3-1.tar.xz
cygwin.cybermirror.org (cygwin.cybermirror.org) をDNSに問いあわせています... 80.83.126.34
cygwin.cybermirror.org (cygwin.cybermirror.org)|80.83.126.34|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 6893432 (6.6M) [application/x-xz]
`python3-3.4.3-1.tar.xz' に保存中

100%[================================================>] 6,893,432    191K/s 時間 42s

2015-05-24 00:17:23 (159 KB/s) - `python3-3.4.3-1.tar.xz' へ保存完了 [6893432/6893432]

python3-3.4.3-1.tar.xz: 完了
Unpacking...
Package python3 requires the following packages, installing:
bash crypt cygwin cygwin-devel libbz2_1 libexpat1 libffi6 libgcc1 libgdbm4 libintl-devel libintl8 liblzma5 libncursesw10 libopenssl100 libreadline7 libsqlite3_0 zlib0 binutils libuuid-devel
Package bash is already installed, skipping
Package crypt is already installed, skipping
Package cygwin is already installed, skipping
Package cygwin-devel is already installed, skipping
Package libbz2_1 is already installed, skipping
Package libexpat1 is already installed, skipping
Package libffi6 is already installed, skipping
Package libgcc1 is already installed, skipping
Package libgdbm4 is already installed, skipping
Package libintl-devel is already installed, skipping
Package libintl8 is already installed, skipping
Package liblzma5 is already installed, skipping
Package libncursesw10 is already installed, skipping
Package libopenssl100 is already installed, skipping
Package libreadline7 is already installed, skipping
Package libsqlite3_0 is already installed, skipping
Package zlib0 is already installed, skipping
Package binutils is already installed, skipping
Package libuuid-devel is already installed, skipping
Package python3 installed
apt-cyg install python3  3.70s user 3.64s system 11% cpu 1:02.64 total
 

⑤removeはできたけどpythonちゃん動いてないじゃん.結局またremoveもできないし.

[Prily@ASAGI] $ python3                                                               [~]
[Prily@ASAGI] $ apt-cyg remove python3                                                [~]
gzip: invalid option -- 'k'
Try `gzip --help' for more information.
awk: コマンドライン:4: 致命的: ファイル `setup/python3.lst' を読み込み用に開けません (No such file or directory)
rm: `setup/python3.lst' を削除できません: No such file or directory
[Prily@ASAGI] $                                                                       [~]

 

⑥不具合の原因を調べる

1. gzipの invalid option – ‘k’ が謎.apt-cygのソースコードを読んでみた感じではgzipのバージョンが古くてオプションをサポートしていないっぽい.(-kはkeep)

→手元のは1.4,最新は1.6だった.

2.pythonが立ち上がらないので直接exeを叩いてみると,__cxa_atexit が cygwin1.dll の中に無いとか言って落ちていた. cygwin自体のバージョンが古いのでは.

→手元のは1.7,最新は2.0だった.

 

⑦公式から最新のcygwinを落とす

apt-cygもpython3.4もcygwinのバージョンが古くて動いていない可能性.

→cygwin+基礎パッケージを適当な場所にインストールして,bin以下をまるごとコピった.

 

⑧動いた.

 

cygwin不自由すぎてとてもつらい.windows使うのがつらい.てかapt-cyg,upgradeサポートしてくれ.

ちなみにお仕事の方もwindowsです.こちらはさすがにcygwin使わずcmder+chocolateyですが,cmderもbashでヒストリ漁った時に出力の表示位置がずれるんだよなあ.なんなんだあれ.

 

あとLive Writerがバグだらけなのでブログを書くのがツライです.そもそも2012年からメンテされてないし.

WordPressの表示も気に喰わないけど直す時間もない.はてなに乗り換えるのありだ…てかMarkdownで書かせてくれ…

 

とにかく1行もコード書いてないのにとてもつかれました.ねます.

言語ごとの要点備忘録

つまみ食いが好きなので色々な言語を触ってちょっとだけコードを書く、みたいなことをいつもしているんですが、
たまに使おうとすると結構忘れていて同じ所で引っかかったりします。
復習すると忘れないだろうというのと、忘れた時に見返せる&書き足せるので、ブログにまとめることに。
なお、この記事は書いているうちになかのひとが疲れてしまったので書きかけです。


C++

まずここを引く癖をつけよう。 https://msdn.microsoft.com/ja-jp/library/dtefa218.aspx

static

・静的ローカル変数(関数内で定義) : 関数が呼ばれ終わっても残る。
・静的メンバ変数&関数(クラス内で定義) : クラスの全てのインスタンスで共有する変数,関数。クラス名::でアクセスする。インスタンスがなくても使える。また、静的メンバ関数からは静的メンバ変数にしかアクセス出来ない。
・静的グローバル変数(グローバルスコープで定義) : ファイルの中でしか使えなくなるグローバル変数。

auto

型推論。関数内でしか使えない。

継承

class Female : (アクセス修飾子) Human {};
アクセス修飾子はpublic, protected(自身と派生クラスからアクセス), public

virtual

抽象クラスを作りたいときに。virtualをつけると仮想関数になる。
class Humanを継承したclass Femaleと class Male のインスタンスをHuman型の配列に入れて、それぞれ継承したメソッドgrowup()を順番に呼びたい時とする。
virtualしないとHumanのgrowup()を読んでしまうが、virtualしておけばそれぞれのメソッドを呼びに行ってくれる。

条件コンパイル

ヘッダに書いて宣言が重複するのを防ぐ。

#ifndef HOGEHOGE 
#define HOGEHOGE 
(header source code) 
#endif

オーバーロードとオーバーライド

オーバーロード : 同じ名前だが引数の型が違う関数 を 複数定義

オーバーライド : 同じ名前で引数の型も同じ関数 を 上書き定義

ラムダ式

[](){}(); 引数:()は省略可能

http://kaworu.jpn.org/cpp/%E3%83%A9%E3%83%A0%E3%83%80%E5%BC%8F

参照クラス

C++/CXのみで使う。参照クラスはWindows Runtimeによって管理される(GCの対象になる)。参照カウンタを使って自動的にデストラクタが呼ばれるのでべんり

宣言 : ref

インスタンス化 : ref new

ポインタ : ^(キャレット、ハンドル) ポインタと同様に使えるがポインタではない。

リングバッファ

STL::dequeでもいいけど、ビットマスクを使うとスマートにかける。


Ruby

ここを引け http://miyamae.github.io/rubydoc-ja/

ruby、便利だが覚えることが多くて書くたび忘れるのでこれからはpythonを使うようにしたい

i++ みたいなインクリメントはできない

毎回確実にハマる

Math

requireしなくても含まれてる

コメントアウト

#か=begin =end

 


Python

勉強中。

ディレクトリ

import os 
os.listdir

標準入出力

import subprocess 
subprocess.call(cmd,shell=True)

コメントアウト

# 複数行は””” ””” だが文字列として扱っているだけで公式な方法ではない

 


js

prototype

var classname = function(arg1) { 
this.arg1 = arg1 
}

classname.prototype =  { 
method1 : function(){}, 
method2 : function(){} 
}

 


Max on js

I/O port

入力ポートの数 : inlets

出力ポートの数 : outlets

I/O

inlet : にどのポートからの入力か(0~)

augument : 実際に来た値。packされてる場合添字アクセスで取り出せる。

msg_int() とかであれば引数に変数名を指定してその名前で使える。

 


Verilog

まだ忘れていないことが多いのでこの項目はありません。

 


git

.gitignore

ホワイトリスト方式で!を使って書く時の注意。

!で無視を取り消すファイルはgitignoreから見える場所にある必要がある。一度無視してしまったフォルダの中身はgitignoreから見えないので、まず①無視してしまったフォルダをホワイトリストに入れる②フォルダの下を全て無視に加える③無視したくないファイルのみを!で否定する のようにする。

/* 
/.* 
!/dir/ 
/dir/* 
!/dir/hoge.txt

 


VBA+Excel

なんでVBなんで書かないといけないんだろう。でもExcelのゴミみたいなグラフ描画機能をなんとかするためには

使わないといけないこともある。前回手探りで書いたけど全然わからない。

よくわからないメソッドがたくさんあるのでデバッグモードでオブジェクトを調べながら書くと良い。

条件分岐

If 条件式 Then 
ElseIf 条件式 Then 
Else 
End If

関数

Sub hoge() 
End Sub

変数

Dim 変数名 As 型 型は省略可能

with

一時的なnamespaceを作っているような感じ…? Withの中では主語(対象)を省略して書ける。

With 対象 
.メソッド 
End With

シート中の要素へのアクセス

AciveSheet, ChartObjects, Chart, とか、

Interior とか、

全ての要素にアクセス?

SeriesCollection

複数のパラメータ

まだよくわかっていないのだけど、グラフの色を決定するプロパティが二つあったりしてややこしい。

どちらが優先されるのかもよくわからない。

色の要素を持つ別々のオブジェクトを継承していたりして、Interior.ColorでもLineナンチャラ.Colorみたいなのでも色が設定できたりする。わけがわからない。

コメントアウト



DOSコマンド

バッチファイルなんて書きたくない、シェルスクリプトを書かせろ

ラベルとgoto

:START 
(処理) 
PAUSE 
GOTO START

 

 


実際、いろいろ書いていると頭がこんがらがってくるので書く言語を絞ったほうが良いのかもしれない。

仕事でやってるわけでもないので継続的に一つの言語扱うのは稀だし、ぱーっと書いてぱーっと忘れる……