Python3関連のことを調べてみた

Python3関連のことを調べてみた

Python3のCGIスクリプトでバイナリデータが出力したい

Python3でCGIを書いたとき、画像データ(PNG)をレスポンスしたくてハマったので方法をまとめておきます。

## HTTPレスポンス
HTTPではWebサーバーにデータをリクエストし、Webサーバーはリクエストされたデータ(HTMLファイルや画像など)をレスポンスとして返します。
以下はHTMLファイルを返すときのレスポンス例です([HTTPリクエスト、HTTPレスポンスとは](https://qiita.com/minateru/items/8693538bbd0768855266))。
“`php
HTTP/1.1 200 OK
Date: Mon, 23 May 2022 22:38:34 GMT
Server: Apache/2.4.1 (Unix)
Last-Modified: Wed, 08 Jan 2022 23:11:55 GMT
Content-Type: text/html
Content-Length: 438



An Example Page


Hello W

元記事を表示

Pythonの自作APIラッパーでChatGPTをしばく

# PythonでChatGPTをしばく

この記事は[**四工大アドベントカレンダー2023**](https://qiita.com/advent-calendar/2023/yonko_univ)に参加しています。
この記事は[**ひとりアドベントカレンダー2023**](https://github.com/Chroma7p/one-man-advent-calendar2023)にも参加しています。

## 概要
– OpenAIが提供するPythonのAPIの変化
– ChatGPTのAPIにおける諸機能
– Pythonで作ったChatGPT関連の自作APIラッパーについて(本題)

## 要約
結局PythonにしてもAPIめんどくさいのでオレオレラッパー作ったよ!見て!
前振りはほとんどぼやきと前提知識だからお急ぎだったら最後の項目へ……

## OpenAIが提供するPythonのAPIの変化
最近(gpt-4-visionが追加されたあたり?)OpenAIが提供しているPythonパッケージに変化があり、だいぶ書き方が変わりました。一応もとのバージョンも使えるよう

元記事を表示

元素種Oを含むPOSCARファイルのパスのみ抽出(ログ)

## 目的
多原子イオンを含まない酸化物において,酸素のみではどういう構造になっているのかを確かめる.

## 目標
元素種O(酸素)を含むPOSCARファイルのパスのみを抽出する.

## 参考
過去ログ[1]を参考に行った.
[1] 元素種C,Oを含むPOSCARファイルのパスのみ抽出(ログ)- Qiita

## スクリプトの説明
* get_O_existed_poscar_path_list.py[1]
* 入力:poscar_existed_file_path_list.npy
* 出力:O_existed_poscar_file_path_list.npy,O_existed_poscar_folder_path_list.npy

[1] https://github.com/k-morii-toridai/scripts_get_O_existed_poscar_path_list.git

## スクリプト実行の流れ
シェルスクリプトを実行する.:
* get_O_existed_posca

元記事を表示

巨大な数の足し算(繰り上がりなし) Python3編

https://paiza.jp/works/mondai/string_primer/advance_step10

巨大な数の足し算。
あれ、、、これじゃだめだっけ?と思ってたけど
OKだった

“`py
S = int(input())
T = int(input())
print(S + T)

“`
え、これでいいのか?
と思ったが、意図は違ったらしい。

>S , T を数値として扱うとオーバーフローが発生します。

> 答えとなる値も数値として扱うことはできない

なるほど。。。だから文字列でしないとだめなのか。
繰り上がりがないとすると、計算はたしかにこうなるよな。。。
でもそれなら、オーバーフローさせて正解にしないほうがいいんじゃないかな?
まあ、勉強ってことで。。

“`py
s = input()
t = input()

ans = “”
for i in range(len(s)):
ans += str(int(s[i]) + int(t[i]))

print(ans)
“`

じゃあ繰り上がりがあるときはどうするのかな?
次の問題もやって

元記事を表示

炭酸イオンを含むPOSCARを,POSCAR.nnlistを用いて判定し,その精度検証を行う(ログ)

## 目的

## 目標
ある結晶構造が炭酸イオンを含むかどうかを判定する.加えて,その精度を検証する.

## 流れ
* ある結晶構造が炭酸イオンを含むかどうかを判定.
1.元素種C, Oを含むPOSCARファイルパスのリストを取得.
2.炭酸イオンの大きさ(半径)を見積もる.その距離(半径)と,1. で得たPOSCARファイルからPOSCAR.nnlistファイルを作成する.
3.2.で得たPOSCAR.nnlistファイルを用いて,POSCARファイルが炭酸イオンを含むかどうかを判定する.
4.3.で炭酸イオンだと判定されたPOSCARファイルパスの一覧を取得する.

* その精度を検証する.
5-1.3.の炭酸イオンかどうかの判定の精度を検証するため,2.で指定する距離(炭酸イオンの半径)を変え,4.の炭酸イオンだと判定されるPOSCARファイルの数が変わるかどうかを確認する.
(5-2.4.で取得した炭酸イオンを含むと判定されたPOSCARファイルを可視化して,炭酸イオンを含むかどうかを検証する.)

## 詳細ログ
### 1.元素種C, Oを含むPOSCARファ

元記事を表示

TIL: pandas のデータ型について

TIL:
・pandas で dtype が object のカラムには str 型と int 型が同居していることがある。
・自動で型推定される時のルールが把握できない。csv 上で同じカラムに同じ文字列「10」が入っている場合でも、 DataFrame に読み込んだら ’10’ (str) になるレコードと 10 (int) になるレコードがある。

→ マージのキーにしたいなど型まで一致してないといけない場合は dtype を与えるのが安全。

元記事を表示

【Python】デフォルト引数を使うときは、引数の順序と可変オブジェクトに注意

# 概要
Pythonでデフォルト引数を使ってみたので紹介。

デフォルト引数では、関数を呼び出す際に引数が提供されなかった場合に、デフォルトで使える値が設定できます。
要は、「オプションのパラメーター」になる、ということです。

サンプルコードでみてみるのが早いと思うので実際に以下のように実行しました。

## サンプルコード

“`py
def add_and_display_list_items(items_list, new_item=”apple”):
items_list.append(new_item)
print(“My Fruit List:”, items_list)

my_list = []
add_and_display_list_items(my_list)
add_and_display_list_items(my_list, “banana”)
add_and_display_list_items(my_list, “lemon”)

# 出力
# My Fruit List: [‘apple’]
# My Fruit List: [‘

元記事を表示

初めてのdocker &Streamlit & FastAPIで詰まった話  (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno 111] Connection refused’))

## 備忘録なので一部省略しています。同じエラーになった方がいれば参考にしてください。

## ぶつかった問題
FastAPI,Streamlit,Dockerを使ってwebアプリを作成していました。

出来上がったのでターミナルで
“`bash
docker compose up -d
“`
を実行してwebページのURLを見にいくと以下のエラーが

“` pythpn
ConnectionError: HTTPConnectionPool(host=’backend’, port=8080): Max retries exceeded with url: /select_genre (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno 111] Connection refused’))
“`
今回は初めての連続だったため何が原因か分からず12時間解決

元記事を表示

Python導入

**はじめに**

WEBスクレイピングの為Pythonを導入する手順をまとめていきます。

・目次
1.Pythonのインストール
2.pip(非公式パッケージ管理ツール)の更新
3.パッケージインストール
 3.1.Seleniumのインストール
 3.2.pandasのインストール
 3.3.ChromeDriverのインストール

4.VSCodeインストール
 4.1.VSCodeの拡張機能(Python)
 4.2.VSCodeの拡張機能(Python Indent)
 4.3.VSCodeの拡張機能(Python Docstring Generator)

5.コマンド一覧
etc

スクレイピングの注意点

・スクレイピングを行うWebサイトの利用規約、著作権を事前に確認すること

・robots.txtを確認すること

3.パッケージインストール

https://qiita.com/BubbleBubble/items/d792505582b966bf4941

元記事を表示

数式の計算 (paizaランク C 相当)

https://paiza.jp/works/mondai/string_primer/advance_step9

複数桁の計算。

`eval()`を使えば一発だけど、
意図的に考えるとそうではないので、
下記のように実装
でもだめだった。
そもそも、+と-を覚える順番が間違っていた。
最初の数値をそのままansにいれればいいのだが、
そうではなく数式も入れてしまってたので数値が代わってしまった。

“`py
s = input()
ans = 0
add = True
tmp = “”
for i in range(len(s)):
if s[i] == ‘+’:
add = True
ans += int(tmp)
tmp = “”
elif s[i] == ‘-‘:
add = False
ans -= int(tmp)
tmp = “”
else:
#+でもーでもなければ数値として登録
tmp += s[i]
if

元記事を表示

数式の計算( 1 桁) Python3編

https://paiza.jp/works/mondai/string_primer/advance_step8

文字列で書かれている数式を確定させて出力させる問題
前回学んだことを活かして下記のように
はじめ、+かーかそうでなければ数値として、答え変数に代入し、
その後、+かーかでフラグを立てて
その次の数値をフラグ通りに計算するという方法。

“`py
s = input()
ans = 0
flag = 0
for i in s:
if i == ‘+’:
flag = 1
elif i == ‘-‘:
flag = 2
else:
if flag == 0:
ans = int(i)
elif flag == 1:
ans += int(i)
elif flag == 2:
ans -= int(i)
print(ans)

“`

答えを見てみるともっと簡単になってた。
奇数が数

元記事を表示

表記の訂正 (paizaランク C 相当)

https://paiza.jp/works/mondai/string_primer/advance_step7

>・ ミス 1
先頭に必要のない 0 がいくつかついてしまう
・ 本来 1 である数値が 0001 と表記されてしまう
・ 本来 0.001 である数値が 00.001 と表記されてしまう
>
>・ ミス 2
小数である数値の末尾に必要のない 0 がいくつかついてしまう
・ 本来 0.1 である数値が 0.10 と表記されてしまう
>
>・ ミス 3
小数である数値に小数点が複数個ついてしまう
ただし、 1 つめの小数点の位置が正しい小数点の位置であるものとします
・ 本来 0.123 である数値が 0.1.2.3 と表記されてしまう。
>
>表記が正しくない可能性のある数値を表す文字列 S が与えられるので、その数値を正しい表記にしてください。
>S を数値として扱うと上手く処理が行えないので気をつけてください。

はい。すっげえ難しく30分過ぎてもできなかったのでギブアップ。

ひとまず考えとして
・小数か整数かで場合分け
・整数なら、正規表現で先頭の000だけ消

元記事を表示

pygameをいじっていて、早めに理解したかったこと

chat GPTとかの回答をそのまま貼り付けることがあります。
作りながら気づいたことを随時追加していきます。
認識違いや追記などございましたら、ご指摘いただけると嬉しいです。

## surfaceとdisplay surfaceの違い
>pygameにおいて、’surface’と ‘display surface’は異なるものですか?

はい、Pygameにおいて「surface」と「display surface」は異なる概念ですが、両者は関連しています。

Surface: Pygameでは、Surfaceは画像や図形を描画するための基本的なオブジェクトです。これは基本的にピクセルの2次元配列で、いかなるグラフィカルコンテンツもこのSurfaceに描画されます。あなたは多くのSurfaceオブジェクトを作成し、それらに異なるグラフィック(スプライト、テキスト、図形など)を描画することができます。

Display Surface: display surfaceは特別なSurfaceで、これはPygameウィンドウまたはスクリーン上に表示されるメインの画面です。pygame.

元記事を表示

【Python/Git】pycacheをgit ignoreする

Pythonのパッケージを実行すると、各パッケージに`__pycache__`フォルダーが自動生成されますよね。
ソース管理上邪魔ですよね。
こうすればいいです。
“`:.gitignore
**/__pycache__/**
“`
こうすることにより、全ディレクトリにある`__pycache__`ディレクトリが全てignoreされます。

:::note
この記事を読んでいる方は、次の記事も読んでいるのかもしれません
* [とりあえず周りと仕事ができるGitHub入門](https://qiita.com/konbraphat51/items/8d4907bf02cfff518462)
:::

元記事を表示

じゃんけんゲーム python

# Python初心者が最初に作るゲーム
python を学習してモチベーションが上がらなくなった人向けにコードをかいてみました
ちょっとpythonを学んだけど次何つくっていいかわからない人向けです

エラー処理もfor文も使っていません
最低限の命令文と条件分岐だけで書いたのでツッコミどころ満載ですが逆に初学者がこれより立派なコードが書けたら熟達者は褒めてあげてください。
今回、極力シンプルに関数も使わず書きました

最後の end=input(‘お疲れ様でした’) の一文はプロンプトのクローズ防止対策です
“`python:janken.py
import random
bot_data = random.randint(1,3)
print (“じゃんけんをしましょう”)
print (“1が’ぐー’、2が’チョキ’、3が’パー’”)
watasi = input (‘何を出しますか?’)
watasi_data = int(watasi)
kekka = bot_data*10+watasi_data
print(‘結果’)
if kekka ==

元記事を表示

【Python】Gmail API を使ってメールを送信する

# Gmail API を使ってみる
[Gmail API のガイド](https://developers.google.com/gmail/api/guides?hl=ja)を参考に Gmail アカウントからメール送信を試した際に、躓いた点について備忘録としてまとめておこうと思います。

### サンプルコードをとりあえず実行してみる
[Gmail API ガイドのメール送信](https://developers.google.com/gmail/api/guides/sending?hl=ja)に記載されている「send_message.py」のコードを参考にメール送信を試してみました。
が、ガイドに記載されている以下のコードをコピペして実行してみても、そのままでは動きません。

“`python:send_message.py
import base64
from email.message import EmailMessage

import google.auth
from googleapiclient.discovery import build
from go

元記事を表示

【GitHub Actions/Python】自動pytestの際に、testsディレクトリ内のモジュールをimportする

## 状況
このようなコードでGitHub Actionで自動テストを運用しておりました。
“`yml:python-tester.ymlname: unit-test

on:
push:
branches: [“dev”, “main”]
pull_request:
branches: [“dev”, “main”]

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [“3.8”, “3.9”, “3.10”, “3.11”]

steps:
– uses: actions/checkout@v3
– name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-vers

元記事を表示

【Python】モジュール構成規則を考えてみる

## はじめに
`Python`のモジュール設計、難しいですよね。

* 何を`__init__.py`でまとめるのか(まとめないと、`import`文がすごく多くなる)
* どのようにモジュールの階層を形成するのか
* `circular import`は避けなければならない

という中で、モジュールを上手にディレクトリに配置しなければなりません。
モジュール設計の指針も有名なものはなさそうなので(あればゴメンナサイ)、自分が考えた設計規則を紹介してみたいと思います。

## 紹介
:::note
そのまま使い回せる英語表記`markdown`:[GitHubレポジトリへ飛ぶ](https://github.com/konbraphat51/module_rule/blob/main/RULE.md)
:::

### 条文(和訳)
詳細は後述です。

1. 基本的に下位モジュールに依存してください。メインモジュールをディレクトリ名と同じにして、メインモジュールの下位モジュールはそのディレクトリに入れてください。

1. モジュールAの下位モジュールがある場合は、それらを全て(モジュ

元記事を表示

pythonでMeCabを使う

# MeCabのインストール
## pythonでのインストール
“`:install
pip install mecab-python3
“`
## PC本体のインストール
http://taku910.github.io/mecab/#download

ここからダウンロードしてインストールするとwindowsの人は初期設定だと
`C:\Program Files (x86)\MeCab\bin`に`mecab.exe`があるとおもいます

# 使ってみる
## 情報を出力
“`python:nomal.py
import MeCab

tagger = MeCab.Tagger(“”)
input = “記事を書く”
output = tagger.parse(input)

print(output)
“`
“`:出力
記事 名詞,一般,*,*,*,*,記事,キジ,キジ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
書く 動詞,自立,*,*,五段・カ行イ音便,基本形,書く,カク,カク
EOS
“`
## わかち書き
>わかち書き(わかちがき)

元記事を表示

【Django】DBから取得したデータ&必ず任意のデータを一つ加えたリストからランダムに取り出す

# 概要
Djangoにて、ORMにより特定の条件に一致するデータをDBテーブルから取得し、任意のデータを必ず一つ加えた上で、その中からランダムに一つの要素を取り出すコードを実装しました。

モデル定義は以下。

“`py
class Country(models.Model):
area_id = models.IntegerField(null=True, blank=True)
name = models.CharField(max_length=100, null=True, blank=True)
capital = models.CharField(max_length=100, null=True, blank=True)

class Meta:
db_table = ‘country’
“`

DBテーブルは以下のように登録してある前提です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/bdcc77

元記事を表示

OTHERカテゴリの最新記事