投稿

ラベル(python)が付いた投稿を表示しています

python のイテレータを再利用可能なリストへ変換

python のファイル一覧取得 os.scandir をループで使用して痛い目に遭う def test(dir): files = os.scandir(dir) print('list1') for file in files: print(file.path) print('list2') for file in files: print(file.path) 上記コードは、二度目のループでは中身が空で何も表示されない os.scandir で生成した リスト (イテレータ)を使いまわししてたら動きがおかしいので調べたら、戻り値はイテレータなので、片方向リンクリストのように再利用時はインデックスが進んでしまっていて戻せないんだとか os.scandir が FindFirstFile API を利用していたら、その方が合理的ではある 書き直すの面倒だなぁと思ってたら list関数でリストへ置き換えできるそうで、小変更で済みました def test(dir): files = list(os.scandir(dir)) print('list1') for file in files: print(file.path) print('list2') for file in files: print(file.path)

Python ディクショナリの keys や values の順序

Python のディクショナリを keys() や values() で独立して読み取った場合、取得される順序が同じかどうか 「python keys values same order」というキーワードで質問が散見され、各バージョン( 2系 , 3系 )共にその間ディクショナリに手が加えられなければ、オーダーが保持されるだそうです SQL の INSERT 文なんかに便利に使えたりする ちなみに、配列をカンマ区切りの文字列で返すには下記のようにすると簡単です s = ', ' .join(data.keys())

Python コメント coding:utf-8 の記述位置

Python + apache で UTF8の情報を扱っていたら SyntaxError: Non-ASCII character のエラーが多発、どうも # -*- coding: utf-8 -*- の記述位置が悪かったようで 途中に記述していたコメントを移動させて #!~/python # -*- coding: utf-8 -*- pythonのパスが先頭、次の行にcodingを記述したら動作するようになった マジックコメントって必要な場所より上にあればいいと思っていた・・・

Python + MySql で execute paramでテーブル名は渡せない

Python + MySql で execute paramでテーブル名は 渡せない そうです cur.execute( "DELETE FROM %s WHERE ( %s = %s );" , ( "myTable" , "myKey" , 10 )) # NG cur.execute( "DELETE FROM %s WHERE ( %s = %s );" % ( "myTable" , "myKey" , 10 )) # OK

Python で可変長引数を関数の戻り値で返す

Python で可変長引数を関数の戻り値で返す def db_connect_config ():      return { 'user' : 'root' , 'password' : 'passwd' , 'host' : 'localhost' , 'database' : 'myDB' } # ::: conn = mysql.connector.connect(**db_connect_config()) 利用側で **

Python で日本語を含む MySQL の select 結果を json で出力

Python で日本語を含む MySQL の select 結果を json で出力する最小限のコードをメモ Python2.7系 #!~\python2.7 # -*- coding: utf-8 -*- # utf8 output import sys import codecs sys.stdout = codecs.getwriter( 'utf_8' )(sys.stdout) # header print ( "Content-type: text/plain; charset=utf-8" ) print ( "" ) # mysql import mysql.connector import json conn = mysql.connector.connect( user = 'root' , password = 'passwd' , host = 'localhost' , database = 'myDB' ) cur = conn.cursor( dictionary = True ) try :     cur.execute( "select * from myTable;" )     rows = cur.fetchall()      print (json.dumps(rows, ensure_ascii = False )) finally :     cur.close()     conn.close() sys.stdout = codecs.getwriter('utf_8')(sys.stdout) で出力を UTF8に cursor で dictionary=True を指定することで、fetch内容に列名が入ってくるので jsonで利用しやすくなります MySQLdb を利用している場合は、cursor(MySQLdb.cursors.DictCursor) json.dumps で ensure_ascii=False を入れないと、"\u4e0d\u660e" みたいに ...

Python の mysql.connector.connect でカラム名を取得

Python の mysql.connector.connect でカラム名を取得 cursor の引き数に dictionary=True を入れる cur = conn.cursor(dictionary=True) が、カラムの並びが???→宿題

Visutl Studio Code で Python だけタブを4スペースにする

Visutl Studio Code のタブ動作をデフォルトのスペースからタブに変更しているが、Pythonは4スペースにしたい Ctrl + Shift + P → Preferences: Configure language specific settings Python(下の方)を選択するか入力 表示されるpython設定に "editor.insertSpaces": true と "editor.tabSize": 4 を追加 {      "workbench.welcome.enabled" : false ,      "files.autoSave" : "off" ,      "editor.insertSpaces" : false ,      "typescript.check.npmIsInstalled" : false ,      "python.linting.enabledWithoutWorkspace" : false ,      "editor.renderWhitespace" : "boundary" ,      "[python]" : {          "editor.insertSpaces" : true ,          "editor.tabSize" : 4     } }

UniServer(Uniform Server) Zero で Python を動かす

簡単に Apache + PHP + MySQL の環境が作れる UniServer Zero で Python を動かしたメモ Pythonを ダウンロード + インストール 必要によって python.exe ディレクトリへパスを通す(cgiとしては通す必要ないです) インストールディレクトリ\PythonXX\ やら \PythonXX\Scripts に通しておくと便利です UniServerZ\core\apache2\conf\httpd.conf を開く py拡張子でスクリプト動作させる場合 httpd.conf の AddHandler cgi-script .cgi ↓ AddHandler cgi-script .cgi .py wwwフォルダでも cgi を動作させる場合 httpd.conf の <Directory "{$US_ROOTF_WWW}"> を探して Options Indexes Includes の下に Options +ExecCGI を書き加える test.py なんかを作って置いてみる※pythonのパスはそれぞれで #!C:\Python27\python.exe print("Content-type: text/plain") print("") print("Hello Python World!")

さくらのレンタルサーバで pip

さくらのレンタルサーバで pip を利用しようとした時の躓きメモ こちら を参考に % mkdir /home/hoge/.local/lib/python2.7/site-packages % easy_install --prefix=~/.local pip % vi $HOME/.cshrc でpath へ $HOME/.local/bin を追加 % source .cshrc で反映 とまぁ、ココまで順調でしたが いざ、インストールへ移ると % pip install mojimoji ←mojimojiを入れようとした error: /usr/local/lib/python2.7/site-packages/mojimoji.so: Permission denied 等の permission 関連のエラーでインストールできない こちら を参考に % vi $HOME/.pydistutils.cfg ←無ければ新規作成される で下記を記載 [install] user=1 これで % pip install ~ が利用可能に 関連項目 確認のため利用可能なモジュールを表示 import sys print sys.modules.keys() さらに utf8 の環境で search の全角文字を半角へ変換する場合 search = mojimoji.zen_to_han(search.decode('utf-8'), kana=False).encode('utf-8') やっぱ python的には、入力情報を Unicode に変換してから処理するべきなのかな