- 1. 超音波距離センサ(HCSR-04)とRaspberry Piを使って凹凸の検出をしたい
- 2. [Python3 入門 9日目] 5章 Pyの化粧箱:モジュール、パッケージ、プログラム(5.1〜)
- 3. 集合内包表記
- 4. 集合のメソッド add remove clear
- 5. PythonでOSの空きポート番号を取得する
- 6. データベースのテーブルをCSVでぶっこ抜き【RとpythonからODBC接続】
- 7. 辞書包括表記
- 8. GUI操作でデータを手軽にグラフ表示するツールを作ったったった
- 9. raise で 意図的に例外を投げかける
- 10. 【Python】エクセル基本操作(読み込み、値書き込み、保存、最大列数、最大行数)
- 11. Python仮想環境作成コマンド
- 12. discord.pyでニコニコ生放送の放送開始通知をDiscordに投稿するbot
- 13. Python3 List/辞書型メモ
- 14. django oscar 簡易チュートリアル
- 15. Pythonの勉強
- 16. TypeError: argument of type xxxxxx is not iterableが出る場合
- 17. リスト内包表記
- 18. UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 5-12: ordinal not in range(128)が出る場合
- 19. pythonのスクレイピング(requests)でエラーが出た時
- 20. 複数の種類の例外を捕捉する
超音波距離センサ(HCSR-04)とRaspberry Piを使って凹凸の検出をしたい
#使用するもの
・Raspberry Pi Zero
・角が直角のもの(ティッシュの箱など)
・HCSR-04センサ×2
・プレッドボード
・ジャンパー#Raspberry Piとセンサを接続する
HCSR-04とRaspberry Pi Zeroをジャンパ等で接続する
今回は接続方法については割愛する.詳細はこちらからhttps://algorithm.joho.info/programming/python/raspberry3-ultrasonic-distance-sensor-hcsr04/
また,センサと検出対象の物体の配置図は以下の図を参照する#検出方法
検出は3つのステップで行います.また,すべてのステップではHCSR-04センサの位置は変更していません
・L:物体の中央線とセンサ間の距離(A,Bとも同じ距離である)
・ℓ:センサAと物体との距離
・ℓ’:センサBと物体との距離###初期状態
![object1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558036/64
[Python3 入門 9日目] 5章 Pyの化粧箱:モジュール、パッケージ、プログラム(5.1〜)
#5.1 スタンドアローンプログラム
– テキストターミナル、またはターミナルウィンドウでPythonを実行している場合、Pythonプログラムの名前に続いてプログラムファイル名を入力する。
“`py
#test1.py
print(“This stadalone program works!”)#結果
$ python test1.py
This stadalone program works!“`
#5.2 コマンドライン引数“`py
#test2.py
import sys
print(“Program arguments:”,sys.argv)#結果
$ python test2.py
Program arguments: [‘test2.py’]$ python test2.py tra la la
Program arguments: [‘test2.py’, ‘tra’, ‘la’, ‘la’]“`
#5.3 モージュールとimport文
– **モジュール**はPythonコードをまとめたファイルである。
– 他のモジュールのコ
集合内包表記
“`py:1
s = set()
for i in range(10):
s.add(i)
print(s)
“`“`:1の実行結果
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
“`これを内包表記にすると
“`py:内包表記1
s = {i for i in range(10)}
print(s)
“`“`:内包表記1の実行結果
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
“`リスト内包表記の時と同様に、
3で割って余り0の数字のみ集合に入れるには“`py:内包表記2
s = {i for i in range(10) if i % 3 == 0}
print(s)
“`“`:内包表記2の実行結果
{0, 3, 6, 9}
“`
集合のメソッド add remove clear
“`py:1
s = {1, 2, 3, 4, 5}
s.add(6)
print(s)
“`“`:1の実行結果
{1, 2, 3, 4, 5, 6}
“`“`py:2
s = {1, 2, 3, 4, 5}
s.remove(5)
print(s)
“`“`:2の実行結果
{1, 2, 3, 4}
“`“`py:3
s = {1, 2, 3, 4, 5}
s.clear()
print(s)
“`“`:3の実行結果
set()
“`
空の辞書{}と区別する為に、
空集合はset()と表す。
PythonでOSの空きポート番号を取得する
ユニットテストで一時的なサーバプロセスを立ち上げたりする際にポート番号がバッティングしないようにしたかった。
`psutil`パッケージを使用する。
“`shell
$ pip install psutil
“`“`python
import psutildef unused_portnumber(start=49152):
# “LISTEN” 状態のポート番号をリスト化
used_ports = [conn.laddr.port for conn in psutil.net_connections() if conn.status == ‘LISTEN’]
for port in range(start, 65535 + 1):
# 未使用のポート番号ならreturn
if port not in set(used_ports):
return port
“`ちなみに[RFC](https://www.iana.org/assignments/service-names-por
データベースのテーブルをCSVでぶっこ抜き【RとpythonからODBC接続】
皆さんCSVでデータベースのデータ抜きたい時どうしてるんですか?
よかったら教えてください!
私はこんな感じ↓↓↓#データベースのテーブルをCSVにしたい
抽出依頼が来てデータベースに対してクエリ書いて出た結果をCSVにしたい。
社内データ分析者はSQL書いて分析用のファイルを作成したりします。
エクセルで組んでODBC接続してきてもいいのですが、どうせならそのまま統計ソフトにデータをぶち込みたい。
そのまま数値の計算ロジックや入れ替えロジックを分析ソフト側で処理してしまいたい。#ODBCで接続
データベースとの接続の仲介をしてくれるodbcなるものがあります。
ODBCの設定やなんたるかは他のサイトに任せましょう。
データベースを自分で設定する人でなければ、誰かが使っているはずなので聞きましょう。
とりあえずデータベースサーバのIPアドレスと接続用ドライバを聞けばOKです。方法はリンクで。
[こことかODBC](http://www.venus.dti.ne.jp/~yoshi-o/RDB/ODBC-connection.html)
[こっちもODBC](http
辞書包括表記
“`py:1
name = [‘太郎’, ‘次郎’, ‘三郎’]
job = [‘勇者’, ‘戦士’, ‘魔法使い’]
d= {}for x, y in zip(name, job):
d[x] = yprint(d)
“`“`:1の実行結果
{‘太郎’: ‘勇者’, ‘次郎’: ‘戦士’, ‘三郎’: ‘魔法使い’}
“`これを辞書包括表記で書くと
“`py:辞書包括表記
name = [‘太郎’, ‘次郎’, ‘三郎’]
job = [‘勇者’, ‘戦士’, ‘魔法使い’]d = {x: y for x, y in zip(name, job)}
print(d)
“`“`:辞書包括表記の実行結果
{‘太郎’: ‘勇者’, ‘次郎’: ‘戦士’, ‘三郎’: ‘魔法使い’}
“`
GUI操作でデータを手軽にグラフ表示するツールを作ったったった
データ分析の作業をしていると、データを数字で追うのとは別にグラフ等で視覚的にデータの特徴を確認することも多々あると思います。
そういった作業が多く、データの組みあわせを自由に変えながらグラフをすぐに表示できる「Glance」というツールを作ってみました。
GUI作成にはPythonの`tkinter`というライブラリを使用しました。ファイルは[こちら](https://gitlab.com/katsuki104/glance)にあります。
**※Windows環境で使う用に作ったのでMac環境だと多分別途修正が必要です…**# 概要
読み込んだデータから選択してグラフ表示するだけのシンプルなツールです。
実装した動作は大きく3つあります。1. ファイル選択からデータを読み込みそのカラムを一覧で表示する
![sample1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160512/394ea708-9f6d-4aec-bf7e-87f5d64b03e0.gif)2. データを選択して
raise で 意図的に例外を投げかける
“`py
import sys, tracebacknumber1 = 100
number2 = 1print(‘start’)
try:
print(1)
raise NameError(‘意図的にネームエラーを発生させました。’)
print(2)
except NameError as e:
print(‘未定義の変数を呼び出しました。’)
sys.stderr.write(traceback.format_exc())
finally:
print(‘end’)
“`“`:実行結果
start
1
未定義の変数を呼び出しました。
end
“`
tryブロックのraise NameError より後ろにある
print(2)は実行されないことに注意。“`:実行時エラー
Traceback (most recent call last):
File “Main.py”, line 9, in
raise NameError(‘意図的にネームエラーを発生させました。’)
Name
【Python】エクセル基本操作(読み込み、値書き込み、保存、最大列数、最大行数)
# pythonでエクセルを扱う
Pythonでエクセルを扱う方法はいくつかあるが、ここでは**openpyxl**を使った方法を紹介する。“`python:sample.py
import openpyxl
“`
#新規エクセルファイルの作り方
ここでは、新規エクセルファイルの作り方を紹介する。“`python:sample.py
import openpyxlwb=openpyxl.Workbook()
ws=wb.active
ws.title=”シート名”
wb.save(“保存先のpath”) #エクセルファイルの保存
“`#既存エクセルの読み込み
次に既存エクセルの読み込み方を紹介する。● 読み込むために必要な物
・既存のエクセルファイル
・エクセルファイルまでのPATH“`python:sample.py
import openpyxlpath=r”読み込みたいファイルまでのpath”
wb=openpyxl.load_workbook(path)
ws=wb.get_sheet_by_name(“読み込みたいシート名”)
“`
Python仮想環境作成コマンド
# 仮想環境とは
開発するアプリケーションによっては特定のバージョンのソフトウェアを使いたいといったシチュエーションが出てくることがあります。そこで一般的には、他の開発環境から独立した環境で開発作業を進めることになります。それが仮想環境です。Pythonには標準パッケージとして”venv”というものが組み込まれているのでそちらを使っていきます。# 動作環境
Windows10
Python 3.8.1
Pycharm 2019.3.1 Community Edition (最強のPython IDE)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286189/8bb2e22f-71c3-fc8b-a977-80b0e6708453.png)# 仮想環境の作成
PycharmのTerminalでpythonが動く事を確認したら下のコマンドを入力“`terminal:terminal
python -m venv <ディレクトリ名>
“`今回はそのまま”venv”とい
discord.pyでニコニコ生放送の放送開始通知をDiscordに投稿するbot
# 初めに
Qiita初投稿になりますfctokyo1016ことリョウ(凌)と申します。 Twitter→[@fctokyo1016](https://twitter.com/fctokyo1016)
普段は主にPHPでの開発なんかを行ってます。
エンジニア歴数年のほぼ素人がなんとか作ったコードなので大目にみていただければ幸いです。# 作ろうとした経緯
– ニコニコ生放送[10名ほどが所属する企画チーム](https://ch.nicovideo.jp/boxtv)に在籍していて、各々が自由に同じコミュニティで生放送が行える状態
– ニコ生のアラートが仕様変更で使えなくなってしまったので、他のメンバーの放送を見る際にURLを探すのが煩わしい
– メンバー全員が入っているDiscordのサーバーに通知が来れば楽なのでは?
– TwitchやYoutubeLiveなどのサイトは既に既存のbotがあるがニコニコには未対応
– なんとかインチキ(自作)できんのかね?# 苦労した点
– 上記でも記載したがニコ生のアラート仕様変更でRSSもAPIもユーザー生放送には対応していない# ア
Python3 List/辞書型メモ
忘れないようにメモ。
# 型について
“`
# List型
sampleA = [[name,”Sato”],[age,1]], [[name,”Mori”],[age,20]]# Dictionary型
sampleB = {“apple”:1, “orange”:2}# 型を調べる
type(sampleA)
type(sampleB)#List型からKey/Valueを取り出す
for index, value in enumerate(sampleA)#辞書型からKey/Valueを取り出す
for index, value in items(sampleA)
“`
django oscar 簡易チュートリアル
ecサイトを一人でパパッと作る必要性が生じたので、パッケージやフレームワークをフル活用すればパパッとECサイトが完成する(はず)。てことで、ウェブフレームワークにDjango。そしてECパッケージにOscarを使用。
django-oscarの[django-oscar/Building your own shop](https://django-oscar.readthedocs.io/en/stable/internals/getting_started.html)を基本的になぞっているだけですが参考に。
最終的に決済機能のないECサイトを構築します。また、これはあくまでもチュートリアルです。
## 開発環境
– Mac OS X
– Python==3.8.0
– Django==2.2.9
– django-oscar==2.0.4## Setup
[ドキュメント](https://django-oscar.readthedocs.io/en/stable/internals/getting_started.html)では、`mkvirtualenv`か`virtu
Pythonの勉強
#python
勉強中なので学んだことをまとめていく。随時追加。
#リスト
辞書を宣言
`ListName = [Value1,Value2, ・・・] `
0番目の値を出力。[-1]で一番後ろの値、[-2]で後ろから2番目の値。
`print(DictioaryName[0]) `
リストの末尾に要素を追加
`team.append(“いぬ”)`
リストの要素を上書き
`team[0] = (“ねこ”)`
リストの要素を削除
`team.pop(0)`#辞書
辞書を宣言
`DictioaryName = {Key:Value, ・・・} `
出力
`print(DictionaryName)`
Keyに対応するValueを出力
`print(DictioaryName[Key]) `
TypeError: argument of type xxxxxx is not iterableが出る場合
#1. 概要
Pythonコード実施時、try:の範囲でエラーが発生すれば、exceptに処理が移る。
下記のコードでは、エラーコードが”sqlite3.IntegrityError”であれば、except以下の
コードを実施する流れになっている。“`python:test.py(関係あるコードのみを掲載)
if __name__==’__main__’:
try:
(略)except sqlite3.IntegrityError as ex:
if “UNIQUE constraint failed: STOCK_INFO.STOCK_NUM” in ex:
print(“ERROR:{}”.format(ex))
“`上記のコードを実施するとエラーが発生する。
“`console
root@2a1627805ea9:/home/stock# python3 sqltest.py 13
7
UNIQUE constraint failed: STO
リスト内包表記
“`py:1
t = (1, 2, 3, 4, 5)
l = []for i in t:
l.append(i)print(l)
“`“`:1の実行結果
[1, 2, 3, 4, 5]
“`
これをリスト内包表記で書くと“`py:1をリスト内包表記で
t = (1, 2, 3, 4, 5)
l = [i for i in t]
print(l)
“`“`:1をリスト内包表記での実行結果
[1, 2, 3, 4, 5]
“`3で割った余りが0の数字だけリストに入れる場合を考える。
“`py:2
t = (1, 2, 3, 4, 5, 6)
l = []for i in t:
if i % 3 == 0:
l.append(i)print(l)
“`“`:2の実行結果
[3, 6]
“`
これをリスト内包表記で書くと“`py:2をリスト内包表記で
t = (1, 2, 3, 4, 5, 6)
l = [i for i in t if i % 3 == 0]
print(l)
“`“`
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 5-12: ordinal not in range(128)が出る場合
#1 問題点
Python3にて、データをcsvに書き込み実施時にエラーが発生する。
“`python:test.py(関係あるコードのみを掲載)
def db_dump(c):
sql_com=’SELECT * FROM STOCK_INFO ORDER BY STOCK_NUM ASC’
tmp=c.execute(sql_com)
with open(setting.CSV_DB_PATH,’w’) as f:
writer=csv.writer(f)
writer.writerows(tmp)“`
上記のコードを使い、データをcsvファイルに書き込みを行う時にエラーが発生する。
“`console:
root@2a1627805ea9:/home/stock# python3 sqltest.py 9
7
Traceback (most recent call last):
File “sqltest.py”, line 105, in
db_dump(cur)
pythonのスクレイピング(requests)でエラーが出た時
#[Errno 11001]について
社内でpythonを使ってスクレイピングしようとしたとき、[Errno 11001]が出た。プロキシ指定を行うと解決。
“`py
import requests
from bs4 import BeautifulSoupproxies = {
‘http’: ‘http://123.45.678.000:0000’,
‘https’: ‘http://123.45.678.000:0000’,
}url = ‘https://ja.wikipedia.org/wiki/Python’
res = requests.get(url, verify=False, proxies=proxies)
soup = BeautifulSoup(res.text)soup
“`“`
Python – Wikipedia
複数の種類の例外を捕捉する
“`py:1
import sys, tracebacknumber1 = 100
number2 = ‘a’print(‘strat’)
try:
answer = number1 / number2
print(answer)
except ZeroDivisionError as e:
print(‘0では割れません。’)
sys.stderr.write(traceback.format_exc())
except NameError as e:
print(‘未定義の変数を呼び出しています’)
sys.stderr.write(traceback.format_exc())
except Exception as e:
print(‘予期せぬエラーが発生しました。’)
sys.stderr.write(traceback.format_exc())
finally:
print(‘end’)
“`“`:1の実行結果
strat
予期せぬエラーが発生しました。
end
“`“`: