山狸 さん プロフィール

  •  
山狸さん: つれづれ日記
ハンドル名山狸 さん
ブログタイトルつれづれ日記
ブログURLhttp://syutin.cside.ne.jp/diary/
サイト紹介文その時々で関心がぶれる。ちびの話やら、最近は何故かPCネタに偏りつつ・・・
参加カテゴリー
更新頻度(1年)情報提供74回 / 343日(平均1.5回/週) - 参加 2011/10/26 12:54

山狸 さんのブログ記事

  • 桁区切りがある数値
  • ユーザーの数値入力を受け付けると、桁区切りが入ってしまっている場合がある。例えば「1800」は「1,800」と入力されるかもしれない。。。。パイソン君にどう思う(?)か聞いてみた。a=’1,800′str(a)絶対無理だろうと思ったらやっぱり駄目だった。「変なの入ってる」と言われた。まあ、そうだよね。次は・・・a=1,800苦情を言われるかと思いきや、何故かすんなり通ってしまった。「何だと思った」のか聞いてみた。答え:タプル [続きを読む]
  • datetimeで日付、時刻を扱う
  • あまりにも何回も同じことを検索するので・・・自分用メモ。now=datetime.datetime.today()とした時の年、月、日、時間、分、秒、マイクロセカンドの取り出しnow.yearnow.daynow.hournow.minutenow.secondnow.microsecond型はint。now自体の型はdatetime.datetime。nowの中身(例):2017-06-13 11:27:11.178127フォーマットして出力したい場合%Y..年、%m..月、%d..日、%H..時、%M..分、%S..秒例:)now.strftime(“%Y年%m月%d日  [続きを読む]
  • 割り算で商と余りを同時に得る
  • 忘れそうなので、取り急ぎここにメモ。Pythonで割り算は「/」か「//」。「//」を使うと小数点以下切り捨て。余りを得るには「%」うう、ちょっと間違えそう・・・「%」で割り算する言語もあったような・・・それはそれとして、割り算の商と余りを同時に得る方法もある。それがdivmod。例えば、75割る60なら、下記のようになる。divmod(75,60)すると、答えは、(1,15)1余り15。これを使う時はこんな感じ。h,m=divmod(75,60)これでh=1 [続きを読む]
  • 正規表現で特定文字列を含まない方法
  • 正規表現を相変わらず勉強中。まあまあ慣れてきたのだが、困ったのが「特定文字列を含まない」ケースを一体どうするのか。特定「文字」を含まない、なら「^」が使える。でも文字列だと上手く行かない。例えば、「ユーザー名変更」や「ユーザー名を変更」にはヒットして欲しいが、「ユーザー名を変更しない」は外して欲しい。「(?!××)」というのがどうやらそうらしい、というので試してみた。こんな感じ。ユーザー名.*変更.*(?!な [続きを読む]
  • タイマーを止められない
  • タイマーを実装したまでは良かった・・・が。実際に使ってみると、「タイマーを開始したけど止めたいゾ」ということがままある。というわけで、止める方法を探したのだが・・・このタイマーは、「threading」を使って別スレッドを走らせている。じゃ、別スレッド止めるか破棄すればいいじゃん。そう単純に考えていた。ところが。「現状では、優先度 (priority)やスレッドグループがなく、スレッドの破壊 (destroy)、中断 (stop)、 [続きを読む]
  • lstripやrstripの罠(単なる勘違いともいう)
  • 文字列操作をおさらいしていて、変な事例に出くわした。―-st=’python’print (st.lstrip(‘typ’))―-これの実行結果はどうなるか。そのままpythonになる、と思っていた。が、これは間違い。「hon」が表示される。あれれれれ〜?????えーとえーとえーと。print (st.lstrip(‘pyt’))なら、「hon」が返るのは分かるけど。そう、根本的に、勘違いしていた。lstripやrstrip、stripは、フレーズに反応しているのではなく、「文字 [続きを読む]
  • 正規表現vs類語辞書 補足
  • 同じネタで引っ張ってるなあと思いつつ…試行回数を5万回に増やしてみた。結果は、コンパイルを活用しても、結局正規表現を使わない方が早かった。なので、正規表現を使わなくても行けるケースでは、原則、正規表現を使わずやる方がいいっぽい。他方、例えばメールの中からメルアドと電話番号を取り出すとか、Webアドレスを取り出すとか、そういう場合は、正規表現を使わないとなかなか難しい(やってやれなくはなさそうだが)。後 [続きを読む]
  • 予めコンパイルしてキーワードチェックしたら
  • 長くなりすぎたので記事を分割。前回の記事で、正規表現のパターンをコンパイルしない場合、結局、単純なキーワード照合なら、正規表現を使わない方が早いようだ、という結論に達した。じゃあ、パターンをまとめてコンパイルしておいたらどうなる、というのをちょっとやってみた。―?#coding;UTF-8import reimport timepatlist3=['(私|僕|彼|それ)は','君は','あれは']st=’私は、みかんが好きです’repat=[]t5=time.time()for pa [続きを読む]
  • 正規表現vs類語辞書
  • 相変わらず正規表現周辺をうろうろ中。私のチャットボットは、目下、類語辞書を使うことで正規表現なしでキーワード対応をしている。単に正規表現を食わず嫌いしていただけなのだが。で、ふと思った。どっちが早いんだろう、と。ついでに、timeで時間を計測することを覚えた(今頃かいっ)ので、今回は、datetimeではなく、timeで計測してみた。下記のpatlistの1〜3がキーワードファイル。ここにあるキーワードが、それぞれstの文 [続きを読む]
  • 正規表現コンパイルする?しない?
  • pythonの正規表現は、予めパターンをコンパイル(機械が理解できる機械語に翻訳すること)しておける。何度もそのパターンを使って一致するかチェックしたい場合は、これをしておくと早くなる。・・・というわけで、ちょいと実験してみた。後、正規パターンの指示は、変数に入れておけるかもついでに実験。#coding:UTF-8import reimport datetimepat='よろしく.?$'slist=['よろしくね','そんなこんなで、よろしく','よろしくお願い [続きを読む]
  • 小数点以下を四捨五入して整数部だけ表示したい
  • タイマーをつけたはいいけど、残り時間が見えないと使っていて不便。というわけで、後何秒か尋ねると教えてくれるようにした。けど・・・うううん。datetimeで時間を取得し、total_seconds()で差を秒数に変えると、小数点以下がずらずらと出て来てしまう。float型で取得するので、そのままではstr型データと混ぜて表示ができない。とりあえず例えば、sa=4.3908みたいな数字があるとして、小数点以下四捨五入は、roundでできる。後 [続きを読む]
  • 正規表現とどっちが早い?
  • ずるずると正規表現を勉強中。正規表現はいろいろできるけど、遅い、という話を良く見る。どのくらいなのか、末尾一致チェックの方法を覚えたので、ちょっと試してみた。単純に1対1だと、圧倒的にendswithを使う方が早い。単にチェックさせるだけなら、1,000やそこらチェックしてもdatetimeを使った計測では所要時間が見えないくらいに早い。ただ、正規表現の柔軟性が活躍できる場面だと、だんだん逆転してくる。あまり良いサンプ [続きを読む]
  • 文字列の頭や尻尾をチェックする
  • 文字列が特定のもので始まっているのか、あるいは終わっているのかを確認する方法ってないのかなあ、と思っていたら、普通にあった。「すたーとうぃず」と「えんどうぃず」。でも、サンプル通りタイプしても何故かエラーが出て上手く行かない。何度やっても上手く行かないので、コピペしてみた・・・ら動いた。一体これはどういうことだ???もう一度よーーーーーく見てみたら、「すたーとうぃず」は「startwith」ではなく「start [続きを読む]
  • mp3とかoggとか
  • pythonで音周りをうろついていると、頻繁に見かける「ogg」。何だろう、と調べて見たら、mp3のような音楽系の圧縮形式らしい。ほうほう。こちらの方が音がいいらしい。ほほほう。いいんじゃなかろーか。pygameの使い方を見ていて、linuxとかはmp3が使えないような話もあったし、じゃ〜oggで。・・・とoggファイルを用意してプログラムで使ってみた。そしたらエラーメッセージが。「oggファイルなんか開けんです」いや、そうじゃな [続きを読む]
  • 再生チェックをしても止まらなかった原因が分かった
  • とってもとほほだったので記録。pygameでmp3再生指示を出した後、こんな風にしようとしていたwhil
    e pygame.mixer.music.get_busy(): key=input('>') if key =='stop': pygame.mixer.music.fadeout(2
    000)print ('End')pygame.mixer.music.get_busy()は、再生中かどうかをチェックするもの。でも、再生
    が終わってもEndが表示されない。何故だ〜〜〜と右往左往することン十分。やっと気がついた。
    そうだ…inputって、入 [続きを読む]
  • pygameでmp3を再生
  • 相変わらずサウンド周りをうろうろ中。pyaudioは、ちと難易度が高いので、歌わせる計画はもう少し後にすることに。で、まず先に、既存ファイルの再生を試すことにした。とりあえずmp3。方法はいろいろありそうだが、pygameを使うのが簡単らしい。pygameは別途インストールが必要。私は以前にインストールしてあるので、このまま使用することに。とりあえず必要なのは、この辺り。pygame.mixer.init()pygame.mixer.music.load(‘tes [続きを読む]
  • 再びアプリ化…
  • 以前、なんとかかんとかpythonで作ったプログラムをアプリ化したのだが、またやろうと思ったら、きれいに方法を忘れてしまっていた。二種類の方法でやったはずなんだけど…どうやったんだっけか〜〜?何故きちんとメモを残さなかったんだ、昔の私!…と怒っていても始まらないので、とりあえず再度悪戦苦闘することに。既に道具はインストールできているはずなのだが、はてさて?とりあえず、py2exeを使ってみることにする。・http [続きを読む]
  • PyAudioを入れてみた
  • winsoundもいいんだけど、windowsのみだし、使い勝手が微妙…ということで、PyAudioを入れてみた。http://people.csail.mit.edu/hubert/pyaudio/を参照し、バージョン的に問題なさそうだったのでコンソールにて下記を実行。python -m pip install pyaudioいともあっさりと入った。躓くケースがあるらしいのだけれども…pipのバージョンが古いぜよ、と注意を受けたので、ついでにpipもバージョンアップ。pipってつまりさえしなけれ [続きを読む]
  • チャットにタイマーを実装するには
  • ただだべっているだけでは、ちょっとアプリ的に寂しい。できれば何か多少なりとも「使える」機能を搭載したい。例えば、タイマーとか。5分後とか1時間後とか、「◯分たったら教えて」と指示すると、指定時間経過後に「時間になったよ」と教えてくれる…そんな機能があれば、ちょっと便利なんじゃないか。タイマー自体は難しくない。1.現在時間を取得2.指定時間だけ待機3.指定時間を過ぎたら「時間になった」と音なりメッセー [続きを読む]
  • pythonで音を鳴らす
  • そういや、音ってどうなのかな、ということで、ちょこっと調べてみた結果をメモ。winsoundというのがあるらしい。ただ、これを使うとwindows専用になってしまうので注意が必要・・・かも。import winsoundwinsound.Beep(523,1000)Beepの後の()内は、前(523)が周波数(32〜32,767の範囲内)、後ろが鳴らす時間。手元でやったところでは、ぽーぽーと鳴った。BeepのところをPlaySoundにして、ファイル名を指定すると、音声ファイル [続きを読む]
  • やっぱり自作モジュールインポートは必要っぽい
  • プログラムがだんだん巨大化してきて、468行にもなってしまった。長い、長すぎる。クラスとその呼び出し元をスクロールして探すのもだんだん難儀に…クラスの位置を表示してくれる機能欲しいな…まあ、だから、開発環境とかが必要になるのだろうけれども。クラスの名前と宣言行を表示させるだけなら私でも組めるんだけど、そこから該当行に飛べないとあまり意味が無い。そして飛べるようにできる気は全くしない。それに、いずれに [続きを読む]
  • バージョン管理をしたいけど
  • プログラムをぐちゃぐちゃといじっていると、バージョン管理が必要になってくる。一応切りのいいところで、ファイル名に数字を加えて残してはいるが、何が何やらだんだん分からなく…メモつきでバージョン管理できるソフトがきっとあるに違いない。そう思って少し調べてみた。時々見かける「Git」はその一つらしい。眺めていても分からないので、TortoiseGitとやらを入れてみた。なんとなく動くが、微妙に思うようにならない。他に [続きを読む]
  • リストの中身を一括でint化/str化したい
  • リストの中身をまとめて型変更したいなーー・・・というわけで。numlist=['1','2','3']str型になっているので…int_numlist=list(map(int,numlist))上記は、python3.4か何か以降。python2では、mapをかけてもリスト型が返るのであらためてlistにする必要はないそうな(そのまま、int_numlist=map(int,numlist)で良いらしい)。strにする場合は…str_numlist=list(map(str,int_numlist))いじょ。 [続きを読む]
  • 複数リストをループさせた時、ループカウントを得る
  • pythonでfor文を回している時、ループ回数を得るには、enumerateを使う。こんな感じ。lines=['a','b','c','d']for i, l in enumerate (lines): print (i,l)では、zipを使って複数のリストをfor文で回している時はどうするかというと…lines=['a','b','c','d']kana=['あ','い','う','え','お']for i, (l,k) in enumerate(zip(lines,kana)): print (i,l,k)ある意味そのまんまだった。便利だけど、なかなか覚えきれない。暗記苦 [続きを読む]
  • Auto Drawをためしてみたけど
  • GoogleがリリースしたとかいうAIお絵かきアプリ(?)のAuto Drawを試してみた。Auto Draw適当な輪郭を描くと、候補を示してくれ、とても上手な絵にかえてくれる、という代物。・・・なのだけれども。面白い、と紹介されていたけど、個人的にはイマイチ。別にAIが描いてくれるわけじゃないのね。多分、イラストは人間が別個に描いて用意していて、「似ていると思われるもの」を候補表示しているのだと思う。なーんだ、つまらん・・ [続きを読む]