Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

ファイル名、ファイル内テキスト一括置換スクリプト 2 (Python2/3対応, その他改善版)

過去に作ったテキスト置換スクリプトを、手直ししました。

過去スクリプト:ファイル名とファイル内テキストを置換するpythonスクリプト - Make it possible with Python.

photo by Mathias L.

このスクリプトは、ファイル名、拡張子の指定条件に一致する複数のテキストファイルのファイル名と内容の一括置換してくれます。

今回改善した点は以下です。

  • Python3 / 2.7 両対応(のはず)
  • 文字コードをShift-JISから、Windows用Shift-JISコードであるcp932に変更
  • 出力ファイルが元ファイルと混在しないよう、リネームファイルは新規フォルダ内に生成
  • 出力ファイル上書き防止のため、同一ファイル名作成時にはエラーと、ファイル名先頭にduplicatedを付与
  • .iniファイルに条件、置換文字列を記載(exeにして配布時のため)

いままでは特定の条件で出力ファイルが空になったりして、人には勧められませんでしたが、これで実用になるのではと思います。

コードはこちら。

続きを読む

エラー AttributeError: 'module' object has no attribute 'html' に対処

相変わらず月に1回くらい、長期記憶を鍛えるかのように一進一退のpythonのコーディングに取り組んでいます。

これからGWくらいで、某アカウントアグリゲーションサービスのスクレイピングをしようとしています。 Webサービスにするとセキュリティが問題になるので、ローカルだけで動かすツールにします。

このサイトを参考に基礎から勉強中。うまく行くのでしょうか。

qiita.com

今日の引っかかりはこんなエラー。

AttributeError: 'module' object has no attribute 'html'

なんか・・・1年くらい前に見た記憶がありますが、原因と対処を思い出せません。

エラー発生時のコードはこれ。

import lxml

a= open(r"201502.htm", "r", encoding='utf-8')

target_html = a.read()

root = lxml.html.fromstring(target_html)

調べた結果、原因は下記URLにあるように、importの記載ミスでした。

python import statement semantics - Stack Overflow

lxmlは moduleだけど、html のattributeは読み込み忘れていたので、moduleに存在しないといわれているエラーでした。

1行目を

import lxml.html

に直して、module内に.htmlを取り込む(?)ことで解決。

すっきり。

herokuでPython3.4 Flask のサンプルアプリケーション動作確認!

前回のheroku挫折からしばらく経過。

python関係の記事が増えてきたようなので、再度チャレンジし、今回は動かすことができたので、学んだことをメモ。

このチュートリアルに沿って実施。 Flask を触ってみる + Heroku で動かす - Qiita

詰まった箇所

"Procfile"のファイル名を小文字の"procfile"としていたことで認識せず、以下のエラー

Mis-cased procfile detected; ignoring. Rename it to Procfile to have it honored.

Procfile declares types -> (none)

しかし先頭文字を大文字にして上書き保存してプッシュしても認識せず。ローカルファイルを一度削除して、コミット、プッシュし、その後再度再度作成、コミット、プッシュしたら認識した。Windowsは大文字、小文字の区別がないので、ファイル名を変えてもgitシステムで変更が認識できなかったりするのだろうか。

HerokuへのデプロイはSourceTreeのGUIからは行えない?

わからなかったのでコマンドプロンプトのGitから実施した。 コマンドプロンプトのGitをはじめて使った。Gitでaddとかcommitとかpushとかをするときは、cdコマンドで該当フォルダに移動して行えば、.gitフォルダから必要な情報を読んでくれるのか。情報にはremoteレポジトリの情報も含まれているから、その登録名だけを使ってプッシュができる。

その他学んだこと

Procfile, Requirements.txt はいずれもルートフォルダに入れる

当たり前すぎて記載のないページが多数。

procfileは複雑でなくてもよく、基本は1行程度

procfile · herokaijp/devcenter Wiki · GitHub Deploying Python Applications with Gunicorn | Heroku Dev Center

gunicornはWSGIサーバー

flaskのサーバーより効率的に動いてくれるとか。 基本は以下のコマンドで起動すればいいので、これをProcfileに書く。

gunicorn hello:app --log-file -

herokuもテキスト形式はUNIX標準にあわせる

herokuなどweb関連サーバーは基本的にunix系なので、 文字コードutf-8 と 改行コードLF になるようすべてのツールを設定すべき。 → sublime text2 もデフォルトはシステム改行コードをそのまま使う設定だったので修正した。

SSHキーを使わなくてもデプロイはできてしまう

SSH Git transportを使いたければSSHキー登録が必要と記載があった。ということは、SSHキーが登録成否はデプロイとは別に確認が必要。 Managing Your SSH Keys | Heroku Dev Center

プライバシーポリシー

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(GoogleアドセンスA8.netAmazonアソシエイトバリューコマースiTunes アフィリエイトプログラム)を利用する可能性があります。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。
またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくはこちら、またはこちらをクリックしてください。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。
また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人が事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。
加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。

  • 特定の自然人または法人を誹謗し、中傷するもの。
  • 極度にわいせつな内容を含むもの。
  • 禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
  • その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

初出掲載:2016年12月30日

BaaSサービスのParse.com の使い方と、危険性について

photo by Abllo™

BaaSとParse.comの利点について

Webサービスを作る場合、BaaSサービスを使わないと初心者では敷居が高すぎると聞いたので、BaaSについて調べてみた。 BaaSというのは、バックエンド処理を提供してくれるサービスで、例えば有名なParse.comというサービスだと、以下のことができるらしい。

Parse.com で出来ること レコードの参照・登録・更新 ユーザ管理(スケルトンが用意されていて、Facebook・Twitter 連携も) 奥の手として、各APIにJavaScriptでサーバサイド処理を書ける(Cloud code) プッシュ通知 Parse.com を Backbone.js のバックエンドとして使ってみる - akiyoko blog

Parse.comを実際に使ってみた

便利そうなので実際に使ってみた。このサイトのチュートリアルが非常にわかりやすかった。

Parse.com を Backbone.js のバックエンドとして使ってみる - akiyoko blog

昨日できたてのVirtualBox環境で、実際に公式チュートリアルのTodoリストを動作させてみた。

BaaSがどうというより、初めてテキスト以外の動的サービスがVirtualBox上で動いてちょっと嬉しかった。

1点だけ詰まったのは、httpサーバーのURLについて。 SSHでcdを使ってディレクトリを移動すると、"python -m CGIHTTPServer" でhttpサーバーを動かす(?)際に、現在のディレクトリが最上位URLになるんですね。

Parse.comにはセキュリティリスクがある

その一方で、こんな指摘を見つけた。

超簡単にできるぐらいなので、そのままだとかなり危険。データベースをネットにさらしているようなもの。MySQLとかPostgreSQLとかOracleの入口をID、パスワードを公開してネットにさらしてる感じと、まずは理解する。 例) 保存されたユーザーのメールアドレスを誰でも閲覧可能 データの一覧は取り放題 誰でもデータも消せちゃう クライアント側からSQLで言うところの、SELECT, UPDATE, INSERT, DELETE 呼べてるんだから、当然。

Parse.com を導入する際に気を付けること:セキュリティの甘さについて - Qiita

これはちょっと怖い。正式サービス前にセキュリティ有識者へのヒアリングと対策が必須な様子。 何もかもうまくいくほど、成熟はしていない様子。

それにしても、BaaSで一番有名なParse.comがこのレベルだと、BaaSを使ったサービスには危険なものも含まれているんじゃないかと気になる。

VirtualBox上にサーバーを立ててpythonを実行

この本を読みながら、Windows内のVirtualbox上で、pythonを実行できた。

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング

教科書のサンプルコードの1行目にある

#!/usr/bin/env python

は、環境変数で "python" を指定するという意味のよう。 環境変数は /usr/bin/env にあることが多いので、この方が汎用性が高まるらしい。

その他メモ

  • 本に書かれていなかったパーミッションは RLoginからGUIで設定できた。

  • しばらく以下のエラーがでてpythonが実行できなかったけど、

CGI script exit status 0x7f00

原因は文字コードがASCIIになっていたことだった・・・。 いつもUTF-8なのになぜ今回に限って・・・。

なにはともあれ、これでweb用のpythonコードを書き始められるはず・・・。

Windows8.1上のVirtualboxにUbunts server 64bitをインストール

言語に多少慣れてきたので、Web方面に一歩踏み出してみることにした。 そのためには仮想環境内にサーバーを立てるといいらしい。 一連の流れで詰まった箇所のメモ

photo by Andrew Mason

VirtualBoxをインストールし、Ubuntuインストール用環境を作成

Windows8.1だとHyperVを削除しないと64bit環境作成ができないらしい。

Windows8 Proの、VirtualBoxで対象OSのバージョンに(64bit)が表示されなく悩んだ。(原因はまた奴のせいでした・・・) | yoshikawa.64kb

「もしや?」と思い「クライアント Hyper-V」ごと削除してみました。 コントロールパネルを開き「プログラムと機能」を選択します。 右側に表示されている「Windowsの機能の有効化または無効化」を選択します。 「Hyper-V」にチェックがついていたら、チェックを外し「OK」を押し削除します。 OSの再起動を求められますので、再起動をしてください。 その後、「VirtualBox」を起動するとなんと、「Ubuntu(64bit)」が普通通り選択できるようになっています。

VirtualboxにUbuntu Server 64bitをインストール

VirtualBoxにUbuntuサーバーのインストール | WinRoad徒然草

ここで言語は日本語を選択しているが、インストール後に文字化けしてちょっと困ったので、英語のママインストールした方がいいかもしれない。

キーボードは半自動選択(?)だと英語キーボードになってしまったので、手動で選んだ方がいいかもしれない。

(必要なら)文字化け修正、キーボード変更

Ubuntu serverの文字化け対策:浜村拓夫の世界

コンソールで英語のメッセージを表示させるための設定を最初に行っておきましょう。 以下のコマンドでホームディレクトリの.bashrcをエディタ開きます。 nanoというエディタで開いています。

$ nano ~/.bashrc

ファイルの末尾に、以下のように記述します。

case $TERM in linux) LANG=C ;; *) LANG=ja_JP.UTF-8 ;; esac

ubuntu server でキーボードの種類を変更するための備忘録 | COMPNET

sudo aptitude install console-data

上のコマンドを実行して、表示されるダイアログで [Select keymap from arch list → qwery → Japanese → StandardPC 100] を選べばキーボードの種類が「日本語 106/109 キーボード」に設定される。

console-data パッケージがすでにインストールされているときは、以下のコマンドを実行すればキーボードの種類を設定するダイアログが表示される。

sudo dpkg-reconfigure console-data