windowsでvscodeインストールしてpythonのdebugができるところまで解説

Step 1: Visual Studio Codeのインストール

まず、公式サイトからVisual Studio Codeをダウンロードしてインストールします。
https://code.visualstudio.com/

Step 2: Pythonのインストール

Pythonがインストールされていない場合は、Pythonの公式サイトから最新版をダウンロードしてインストールします。
https://www.python.org/downloads/

Step 3: VS CodeにPython拡張機能をインストール

Visual Studio Codeを開き、左側のメニューから「Extensions」をクリックします。検索バーに「Python」と入力し、Pythonの拡張機能を選択してインストールします。拡張機能がインストールされると、Visual Studio Codeを再起動するように求められます。

Step 4: デバッグ機能の設定

Visual Studio Codeを開き、「Debug」をクリックして、デバッグ機能を有効にします。初めてデバッグ機能を使う場合は、設定ファイルが自動的に作成されます。

Step 5: デバッグの設定

Visual Studio Codeの左側のメニューから、「Run and Debug」を選択します。デバッグメニューが開かれたら、Pythonファイルを開きます。次に、デバッグメニューから「Python File」を選択し、自動的に設定ファイルが作成されます。この設定ファイルでデバッグを設定することができます。

Step 6: ブレークポイントの設定

デバッグを行う前に、ブレークポイントを設定することができます。ブレークポイントは、コードを一時停止させ、その時点での変数やオブジェクトの値を確認することができます。ブレークポイントを設定するには、行番号をクリックしてブレークポイントを設定します。

Step 7: デバッグ実行

デバッグを実行するには、「Run and Debug」メニューから「Python File」を選択します。コードが実行され、ブレークポイントで一時停止されます。この時点で、変数やオブジェクトの値を確認することができます。デバッグの継続や進め方には、デバッグメニューから操作することができます。

pythonでwindows時計同期

binanceのAPIコールでよく時計ずれのエラーが起きるので、スクリプトの先頭で実行する
なぜかグリニッジ標準で指定しないと時計がえらいずれた。

import win32api
import ntplib
from datetime import datetime
import pytz


##時計同期
# NTPサーバーのアドレス
ntp_server = 'time.windows.com'
# タイムゾーンを指定 なぜかasia指定すると時計がもっとずれる
tz = pytz.timezone('Etc/GMT')
# NTPサーバーから現在時刻を取得
client = ntplib.NTPClient()
response = client.request(ntp_server)
# 取得した時刻をWindowsの時計に設定
# datetimeオブジェクトを作成し、年を取得
dt = datetime.fromtimestamp(response.tx_time,tz)
win32api.SetSystemTime(dt.year,
                       dt.month,
                       dt.weekday(),
                       dt.day,
                       dt.hour,
                       dt.minute,
                       dt.second,
                       dt.microsecond//1000)

MFC/WindowsAPIでURL指定ファイルダウンロード キャッシュ使わない版

結局DeleteUrlCacheEntry()使わないとキャッシュ使われちゃう。
OpenURL()とかにflag指定あるけど機能してないっぽい。

BOOL Web_Downloader(LPCTSTR lpszURL, LPCTSTR lpszFileName)
{
	CInternetSession session;
	CStdioFile file;
	CInternetFile* pFile = NULL;
	DWORD dwBytesRead = 0;
	BOOL bSuccess = FALSE;

	try
	{
		DeleteUrlCacheEntry(lpszURL);

		pFile = (CInternetFile*)session.OpenURL(lpszURL);
		if (pFile != NULL)
		{
			if (file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
			{
				const long buffersize = 5*1024*1024;
				BYTE *buffer = new BYTE[buffersize*2];
				DWORD dwRead;
				while ((dwRead = pFile->Read(buffer, buffersize)) > 0)
				{
					// ファイルに書き込み
					file.Write(buffer, dwRead);
					dwBytesRead += dwRead;

					// 進捗を表示
					// ファイルサイズをカンマ付きの文字列に変換して、ダイアログに表示する
					char szBuf[128];
					int2NumberFromat(szBuf, 128, dwBytesRead);
					CString message;
					message.Format(_T("%s byte ダウンロード済み"), szBuf);

				}
				file.Close();
				bSuccess = TRUE;

				delete [] buffer;
			}
		}
	}
	catch (CInternetException* e)
	{
		e->Delete();
		if (pFile != NULL) {
			pFile->Close();
			delete pFile;
		}
	}

	if (pFile != NULL) {
		pFile->Close();
		delete pFile;
	}

	return bSuccess;
}

SBI証券で対応している米国株式取扱銘柄一覧取得 python

当然SBI証券のページ構成が変わったら使えなくなります。

import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_usequity_list.html"
response = requests.get(url)
response.encoding = response.apparent_encoding  #エンコーディング指定。これないと日本語文字列が文字化けする
soup = BeautifulSoup(response.text, "html.parser")

# テーブルから必要な列(ティッカー)を抽出
stock_tickers = []
etf_tickers = []
adr_tickers = []

with open("tickers.csv", "w", newline="") as csvfile:
    writer = csv.writer(csvfile)

    tables = soup.find_all("table", class_="md-l-table-01")

    #普通株式 収集
    table = tables[0]
    df = pd.read_html(str(table))[0]
    if 'ティッカー' in df.columns:  # ティッカー列がある場合
        stock_tickers += df['ティッカー'].tolist()

    #ETF 収集
    table = tables[1]
    df = pd.read_html(str(table))[0]
    if 'ティッカー' in df.columns:  # ティッカー列がある場合
        etf_tickers += df['ティッカー'].tolist()

    #CSV出力
    for ticker in stock_tickers:
        writer.writerow([ticker, "stock"])

    for ticker in etf_tickers:
        writer.writerow([ticker, "etf"])

    #ADR 収集
    tables = soup.find_all("table", summary="layout" )

    for table in tables:
        df = pd.read_html(str(table))[0]
        if 'ティッカー' in df.columns:  # ティッカー列がある場合
            adr_tickers += df['ティッカー'].tolist()

    #CSV出力
    for ticker in adr_tickers:
        writer.writerow([ticker, "adr"])

chatGPT APIを使ってローカルchat python

ローカルでカスタマイズして実行できるし。
ChatGPT Plusにお金払うより安く済みそう

import openai


def main():
    openai.api_key = "API CODEをここに書いてね"
    amount_tokens = 0
    chat = []

    # ChatGPTへの設定を書いておく
    chat.append({"role": "system", "content": "Please respond as a seasoned OpenAI programmer."})
    chat.append({"role": "system", "content": "Please think in English and translate your answer into Japanese."})
    chat.append({"role": "system", "content": "If you need additional information to get the best results for this task, please ask questions!"})

    print("チャットをはじめます。q または quit で終了します。")
    print("-"*50)
    while True:
        user = input("<あなた>\n")
        if user == "q" or user == "quit":
            print(f"トークン数は{amount_tokens}でした。")
            break
        else:
            chat.append({"role": "user", "content": user})

        print("<ChatGPT>")
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",messages=chat
        )
        msg = response["choices"][0]["message"]["content"].lstrip()
        amount_tokens += response["usage"]["total_tokens"]
        print(msg)
        chat.append({"role": "assistant", "content": msg})


if __name__ == "__main__":
    main()

急にWin32でMFC使ったプロジェクトがビルドできなくなった時の対処

Visual Studio 2022で気が付いたら32bitビルドに切り替えるとMFCが見つからないといわれるようになった。

多分VS2022本体のアップデートがきっかけだとおもう。

・ツールメニューから「ツールと機能を取得」を選択
・ダイアログ ボックスの上部にある [個別のコンポーネント] タブを選択します。
・[コンポーネントの検索] ボックスに「MFC」と入力します。
・プロジェクトのターゲットに一致する MFC コンポーネントを選択します (x86 や ARM64EC など)。 Spectre 軽減策を有効にしてプロジェクトをビルドする場合は、Spectre 軽減策を含むコンポーネントを選択します。

ターゲットがわからない場合は手あたり次第にインストール。
こちらではこれで解決した。ほんとは余計なのは削ったほうがいいんだけどね