goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

JAVAファイルをJARファイルに変換するアプリをPythonで作ってみた。

2023-05-06 20:28:32 | python
”新しい Bing へようこそ
AI を利用した Web向け copilot”
今回は↑BingAIを使ってみた。ChatGPTで失敗したのでやり直し。
「JAVAファイルをJARファイルに変換するPythonコードをTKinterのファイル読み込みウィジェットを使って書いてください」

JAVAファイルをJARファイルに変換するPythonコードをTKinterのファイル読み込みウィジェットを使って書くとしたら、以下のようになるかもしれません。コードはPythonで書いています。

# tkinterライブラリーをインポート
import tkinter as tk
from tkinter import filedialog

# subprocessライブラリーをインポート
import subprocess

# ファイル選択関数
def select_file():
    # ファイルダイアログを開く
    file_path = filedialog.askopenfilename(filetypes=[("JAVAファイル", "*.java")])
    # 選択したファイルのパスを表示
    label.config(text=file_path)
    # ファイルの拡張子をチェック
    if file_path.endswith(".java"):
        # JARファイルに変換する関数を呼び出す
        convert_to_jar(file_path)
    else:
        # エラーメッセージを表示
        label.config(text="JAVAファイルを選択してください")

# JARファイルに変換する関数
def convert_to_jar(file_path):
    # ファイル名と拡張子を分離
    file_name, file_ext = file_path.split(".")
    # コマンドラインでjavacコマンドを実行してクラスファイルにコンパイル
    subprocess.run(["javac", file_path])
    # コマンドラインでjarコマンドを実行してJARファイルにパッケージング
    subprocess.run(["jar", "cf", file_name + ".jar", file_name + ".class"])
    # 完了メッセージを表示
    label.config(text="JARファイルに変換しました")

# ウィンドウを作成
window = tk.Tk()
window.title("JAVAファイルからJARファイルへ")

# ラベルを作成
label = tk.Label(window, text="JAVAファイルを選択してください")
label.pack()

# ボタンを作成
button = tk.Button(window, text="ファイル選択", command=select_file)
button.pack()

# ウィンドウを表示
window.mainloop()

一応ウィジェット表示されて動いたが、本当にJARファイルに変換されたか確認できなかった。

ソースコードを暗号化するPythonプログラム

2023-05-06 18:36:49 | python

ソースコードを暗号化するPythonプログラムを書いてください。

ただし、TKinterを用いてファイルを指定して読み込むウィジェットを表示できるようにして。

import tkinter as tk
from tkinter import filedialog
import base64

def select_file():
file_path = filedialog.askopenfilename()
if file_path:
with open(file_path, "rb") as file:
script = file.read()
encrypted = base64.b64encode(script)

output_file_path = filedialog.asksaveasfilename(defaultextension=".pye")
if output_file_path:
with open(output_file_path, "wb") as output_file:
output_file.write(b"import base64 ")
output_file.write(b"exec(base64.b64decode(")
output_file.write(repr(encrypted).encode("utf-8"))
output_file.write(b"))")

root = tk.Tk()

# ファイル選択ボタンを作成
button = tk.Button(root, text="ファイルを選択", command=select_file)
button.pack(pady=10)

root.mainloop()

のコードは、ファイル選択ダイアログを表示し、選択されたファイルを暗号化して新しいファイルとして保存します。暗号化には、前の例と同様にbase64モジュールを使用します。

filedialog.asksaveasfilename()メソッドを使用して、暗号化されたファイルを保存する場所と名前を指定するダイアログを表示します。defaultextension引数を使用して、デフォルトで保存されるファイル拡張子を指定します。

このコードでは、暗号化されたコードを直接実行するために、exec()関数を使用しています。ただし、安全性のために、暗号化されたコードが実行される前に、必要なチェックと検証を行うことが重要です。

ChatGPT Very Good Job!!!

h = float(input("身長は?")) / 100.0
w = float(input("体重は?"))
bmi = w / (h * h)
if bmi >= 25.0:
print("お前はデブだ!")
else:
print("お前はデブじゃなくて良かったな!")

が元のソースコード。

ばっちりウィジェットが表示され、

暗号化したいソースコードファイルを選択するとリネームするよう要求され、

別のファイル名を付けると以下の通り、見事に暗号化されていた。

import base64
exec(base64.b64decode(b'aCA9IGZsb2F0KGlucHV0KCLouqvplbfjga/vvJ8iKSkgLyAxMDAuMA0KdyA9IGZsb2F0KGlucHV0KCLkvZPph43jga/vvJ8iKSkNCmJtaSA9IHcgLyAoaCAqIGgpDQppZiBibWkgPj0gMjUuMDoNCiAgICBwcmludCgi44GK5YmN44Gv44OH44OW44Gg77yBIikNCmVsc2U6DQogICAgcHJpbnQoIuOBiuWJjeOBr+ODh+ODluOBmOOCg+OBquOBj+OBpuiJr+OBi+OBo+OBn+OBqu+8gSIpDQoNCg=='))

これはさすがに読めないだろう。

しかし、暗号化する前の元のファイルと同じようにしっかり動作した。

今度は逆に暗号化されたソースコードを復号化するプログラムを書いてもらったが、

復号化されたソースコードは以下の通り文字化けしていて失敗した。

Šjh®ÖÚ±î¸{œm«ë†úáל¡×›h = float(input("身長は?")) / 100.0
w = float(input("体重は?"))
bmi = w / (h * h)
if bmi >= 25.0:
print("お前はデブだ!")
else:
print("お前はデブじゃなくて良かったな!")

参考までに復号プログラムを書いておく。

import tkinter as tk
from tkinter import filedialog
import base64

def select_file():
file_path = filedialog.askopenfilename()
if file_path:
with open(file_path, "rb") as file:
encrypted_script = file.read()
decoded_script = base64.b64decode(encrypted_script)

output_file_path = filedialog.asksaveasfilename(defaultextension=".py")
if output_file_path:
with open(output_file_path, "wb") as output_file:
output_file.write(decoded_script)

root = tk.Tk()

# ファイル選択ボタンを作成
button = tk.Button(root, text="ファイルを選択", command=select_file)
button.pack(pady=10)

root.mainloop()


ランサムウェアに感染したファイルを検疫するには?

2023-05-06 14:24:57 | python
ランサムウェアに感染したファイルからパスワード入力を求めるプログラムを削除するpythonアプリのソースコードを書いてください
 
ランサムウェアに感染したファイルからパスワード入力を求めるプログラムを削除するには、感染したファイルを特定し、そのファイル内からパスワード入力を求めるプログラムを検索して削除する必要があります。
 
以下は、Pythonを使用してランサムウェアに感染したファイルからパスワード入力を求めるプログラムを削除するスクリプトの例です。
 
import os
import re
 
# 感染したファイルのパス
infected_file = "C:/path/to/infected_file"
 
# ファイルを読み込む
with open(infected_file, "rb") as f:
file_data = f.read()
 
# パスワード入力を求めるプログラムを検索
match = re.search(b"Please enter your password:", file_data)
 
# プログラムを削除
if match:
password_program = match.group(0)
file_data = file_data.replace(password_program, b"")
with open(infected_file, "wb") as f:
f.write(file_data)
 
print("Password program removed successfully.")
else:
print("Password program not found.")
上記の例では、感染したファイルのパスを指定します。open()メソッドを使用して、ファイルをバイナリモードで読み込みます。その後、re.search()メソッドを使用して、ファイル内のパスワード入力を求めるプログラムを検索します。もしプログラムが見つかった場合、replace()メソッドを使用してプログラムを削除し、open()メソッドを使用してファイルに書き込みます。ファイルの書き込みが完了したら、プログラムが削除されたことを示すメッセージを表示します。
 
上記の例は、単純な文字列検索を使用してパスワード入力を求めるプログラムを検索していますが、ランサムウェアによっては、より複雑な方法でパスワード入力を求めるプログラムを実装している場合もあります。その場合は、より高度な解析技術を使用する必要があります。また、ファイルを直接編集することは、ファイルが破損する可能性があるため、慎重に行う必要があります。
 
Java password removal.の記事
https://blog.goo.ne.jp/nichikon2/e/b7ac8454a60aacb1669f3a253c239f5e
をちょっとリライトしてみた。
 
後で
で作ったパスワード入力フォームで実験してみたい。
 
P.S.
パスワード入力を求めるソースコードは見つかりませんでした。
と出て全く機能していないことが判明。
PDFファイルにパスロックをかけて試してみたが、これもダメだった。
 
 
 

Java password removal.

2023-05-02 12:33:00 | python
JAVAで書かれたexeファイルからパスワード入力を求めるソースコードを検出して削除するPythonプログラムを書いて
Javaで書かれたexeファイルからパスワード入力を求めるソースコードを検出して削除するPythonプログラムを書くには、以下の手順に従うことができます。
exeファイルをバイナリ形式で読み込む
バイナリファイルからJavaコードを抽出する
抽出されたJavaコードの中から、パスワード入力を求めるソースコードを検出する
検出されたソースコードを削除する
削除したJavaコードを再びバイナリ形式に変換する
新しいexeファイルを書き出す
以下は、この手順を実現するPythonプログラムの例です。
import os
# exeファイルのパスを指定する
exe_path = "path/to/exe/file.exe"
# exeファイルをバイナリ形式で読み込む
with open(exe_path, "rb") as f:
binary_data = f.read()
# バイナリファイルからJavaコードを抽出する
java_code = ""
start_pattern = b"Êþº¾" # Javaバイトコードのシグネチャ
end_pattern = b"" # クラスファイルの終了パターン
start_idx = binary_data.find(start_pattern)
end_idx = binary_data.find(end_pattern, start_idx)
if start_idx >= 0 and end_idx >= 0:
java_code = binary_data[start_idx:end_idx]
# 抽出されたJavaコードの中から、パスワード入力を求めるソースコードを検出する
password_pattern = b"String password = getPassword();"
if password_pattern in java_code:
# 検出されたソースコードを削除する
java_code = java_code.replace(password_pattern, b"")
# 削除したJavaコードを再びバイナリ形式に変換する
new_binary_data = binary_data[:start_idx] + java_code + binary_data[end_idx:]
# 新しいexeファイルを書き出す
new_exe_path = os.path.splitext(exe_path)[0] + "_modified.exe"
with open(new_exe_path, "wb") as f:
f.write(new_binary_data)
else:
print("パスワード入力を求めるソースコードは見つかりませんでした。")
このプログラムでは、まず指定されたexeファイルをバイナリ形式で読み込みます。次に、Javaバイトコードのシグネチャとクラスファイルの終了パターンを使ってJavaコードを抽出し、その中からパスワード入力を求めるソースコードを検出します。検出されたソースコードを削除した後、元のバイナリデータのJavaコード部分を削除されたJavaコードに置き換え、新しいバイナリデータを作成します。最後に、新しいバイナリデータを使って新しいexeファイルを書き出します。
このプログラムは、指定されたexeファイルにJavaコードが含まれていることを前提としています。また、パスワード入力を求めるソースコードが正確に「String password = getPassword();」という形式で書かれている場合にのみ検出・削除を行います。もし、パスワード入力を求める別の形式のソースコードが使われていた場合には、このプログラムでは検出できない可能性があります。
なお、このような操作は、法的な観点からも慎重に行う必要があります。もし、自分自身が作成したexeファイルのパスワード入力機能を削除する場合でも、そのexeファイルの使用許諾書などに違反する可能性があるため、事前に確認することが望ましいです。また、他人が作成したexeファイルに対してこのような操作を行う場合には、著作権やプライバシーに関する問題が発生する可能性があるため、慎重に判断する必要があります。
P.S.
j2sdk-1_4_2_10-nb-4_1-win-ml .exeファイルで試してみたら「パスワード入力を求めるソースコードは見つかりませんでした。」とのメッセージが出てエラーが出ずに動作することが確認できた。
実際のランサムウェアでは、何の言語で書かれているか分からず、しかも分かったとしても暗号化されており、もっと複雑で分かりにくい形式で書かれていると思われる。
ChatGPT good job!

AutocadでのモデリングをPythonで自動化する話

2023-05-01 13:13:06 | python

Top 10 AutoCAD automations in Python - SCDA

Top 10 AutoCAD automations in Python - SCDA

My fellow SCDA member, Tanmay Sawant, and I have developed a considerable amount of documentation covering AutoCAD automatization in Python. It is available on t...

SCDA

以下はこのサイトの和訳。

Python での AutoCAD 自動化のトップ 10
に公開2022 年 8 月 19 日Linnart Felkl M.Sc.

仲間の SCDA メンバーであるTanmay Sawantと私は、 Python でのAutoCAD の自動化に関するかなりの量のドキュメントを作成しました。このブログでは、さまざまなブログ投稿の形で入手できます。この記事では、pyautocad、pythoncom、 pywin32などを使用して Python で自動化できる AutoCAD タスクのトップ 10 を指摘したいと思います。

ドキュメントの管理と制御
Python で pyautocad を使用すると、どの図面を現在アクティブにするかを制御できます。これにより、単一のスクリプト、つまり単一のワークフローで複数の図面を調整できます。図面を切り替えたり、要素を追加、削除、編集したり、それぞれの図面に属する関連する AutoCAD オブジェクトにアクセスしたり操作したりできます。たとえば、ActiveLayout、ActiveLayer、ActiveViewport などがあります。

面倒な寸法記入、レイヤー設定、テキスト追加など。
pyautocad、pythoncom、およびpywin32を使用して、図面内のレイヤーを設定、編集、および選択できます。図面の寸法を調整することもできます。テキストの追加、調整、コピー、貼り付け、または削除も、AutoCAD 用の Python モジュールを使用して簡単に実行できます。

他のフォーマットとの間でのインポートとエクスポート
Python for AutoCADを使用すると、ファイルのインポートとエクスポートの両方で、さまざまなファイル形式間で変換できます。Excel ファイル、CAD 図面、dxf ファイル、bmp ファイル、およびその他の多くのファイル形式を処理できます。これはすべて自動的に実行できます。つまり、Python プログラムに従って完全に自動化されます。

AutoCAD ビューポート設定の調整
図面のオブジェクトをペーパー空間に追加するときはいつでも、ビューポート設定を使用して調整します。関連する桟橋との文書交換用のハード コピーを作成するときに、ビューポート設定を使用します。例えば、請負業者と顧客の間のハードコピー取引。より高速なラップトップで作業している場合でも、これらの操作にはかなりの時間がかかります。ビューポート設定は、pyautocad やpywin32などを使用して、Python で調整できます。このワークフローを Python スクリプトに変換すると、AutoCAD で作業する際の生産性が向上します。

エンティティと材料の量の分析
図面内の材料または特定のエンティティの検索は、AutoCAD の検索機能を使用して手動で行うことができます。しかし、これは Python でスクリプト化することもできます。さらに、このワークフローを Python スクリプトに転送すると、度数分布表などを作成するための関連基準によって、エンティティとマテリアルを簡単に定量化できます。

AutoCAD 要素のタグ付け
図面内に AutoCAD エンティティが複数出現する場合、通常、エンティティにタグを付けます。これを手動で行うには長い時間がかかります。AutoCAD のタグ付けは Python で自動化できるので、これは無駄な時間だと思います。

2D および 3D AutoCAD モデリング
スクリプトを使用して、2D および 3D の AutoCAD 要素を Python で直接描画できます。これらの要素を図面の指定した場所に追加できます。さらに、プロパティを操作して、AutoCAD オブジェクトを 2D または 3D で変更することもできます。

AutoCAD ブロックの作成と処理
複数のエンティティをブロックとして定義し、ブロック内のエンティティを編集することは、Python でスクリプト化できます。AutoCAD ブロック処理に pyautocad を使用すると、AutoCAD Block と AutoCAD BlockReferrence オブジェクトの両方のさまざまな関連プロパティにアクセスできます。たとえば、ブロックに属性があるかどうかを確認したり、ブロック間の変換係数を調整したり、動的ブロックまたは静的ブロックにしたり、レイヤーの割り当てを調整したりできます。

カスタム AutoCAD ツールの開発
Python で AutoCAD 操作のスクリプトを作成すると、プロジェクトに固有のカスタム アプリケーションを開発できます。たとえば、倉庫のコンセプトとレイアウトを定期的に開発しているとしましょう。倉庫業の 3PL などで働いている可能性があります。いくつかのレイアウト カテゴリがあります。通常、各カテゴリは同じタイプのレイアウトを適用します。ただし、スペースや寸法、保管通路やワーク ステーションの量などにより、レイアウトはそれぞれ異なります。Python を AutoCAD に使用するレイアウト カテゴリごとにパラメータ化された「描画」スクリプトを開発し、初期入力データに基づいて、特定のプロジェクトまたはクライアントに必要なレイアウトを生成できます。必要なことは、レイアウト カテゴリを選択し、関連する入力パラメータ データを設定することだけです。これは、使いやすい GUI または Excel ファイルで行うことができます。

AutoCAD 以外の Python 機能を利用する
以前は手動だった AutoCAD ワークフローを Python に移行すると、Python の機能にアクセスできるという利点が得られます。これには、AutoCAD 自体に付属していない機能が含まれます。関数とメソッドを記述し、データ構造とデータベースにアクセスし、補完的な視覚化およびプロット ソフトウェアを使用できます。ユーザーフレンドリーなインターフェースでフロントエンドに満足できます。

Python による AutoCAD 自動化のまとめ
この記事では、Python でのAutoCAD の自動化について取り上げる動機を強調しました。手動の AutoCAD ワークフローを Python スクリプトに変換すると、生産性が向上します。特に、反復的または準反復的な AutoCAD タスクに毎日直面している場合はなおさらです。Python for AutoCADを使用すると、2D および 3D コンポーネントをモデル化し、ブロックにグループ化し、既存のブロックを調整したり、特定の操作用のカスタム ツールを作成したりできます。要素のタグ付け、図面の分析と検索、ビューポート設定の調整、寸法記入などの面倒な作業の自動化を行うことができます。また、さまざまなドキュメントを管理および制御し、ファイル形式 (Excel、dwg、CAD ファイルなど) を変換することもできます。最も重要なのは、AutoCAD に Pythonを使用することです。AutoCAD 以外の機能を活用できます。これを使用して、プロジェクトまたはクライアント固有の問題用のカスタム アプリケーションを開発できます。

関連する AutoCAD 自動化コンテンツへのリンク
Python を使用したAutoCAD の自動化について詳しく知りたい場合は、他の pyautocad およびpywin32関連の記事を参照することをお勧めします。それらのいくつかのリストを次に示します。

リンク: Python を使用した AutoCAD のオブジェクトの位置がずれている
リンク: Python の AutoCAD 属性オブジェクト
リンク: Python の AutoCAD ブロック オブジェクト
リンク: AutoCAD ドキュメント オブジェクト inpyautocad
リンク: Python の AutoCAD アプリケーション オブジェクト クラス
リンク: AutoCAD に押し出しソリッドに沿ってパスを追加
リンク: Python を使用した AutoCAD のリージョン オブジェクト
リンク: pyautocad にメソッドを追加
リンク: pythoncom の「呼び出しが呼び出し先によって拒否されました」を解決しました
リンク: Python を使用した AutoCAD オブジェクトのツリー データ構造
リンク: Python で pyautocad を使用して AutoCAD のオブジェクトを拡張する
リンク: Python で pyautocad を使用して AutoCAD で交差するオブジェクトを操作する
リンク: Python のリストと辞書を使用して、pyautocad で AutoCAD オブジェクトを操作する
リンク: Python の pyautocad を使用した AutoCAD のラスター イメージ オブジェクト
リンク: Python で pywin32 を使用して AutoCAD テンプレートでオブジェクトをハッチングする
リンク: Python で pyautocad を使用して AutoCAD で 3D メッシュ オブジェクトを操作する
リンク: Python で pywin32 を使用して double コンストラクターを作成する
リンク: pywin32 (win32com) を使用した AutoCAD との Python 統合
リンク: Python で pyautocad と pywin32 を使用して AutoCAD テンプレートのオブジェクトを削除する
リンク: Python で pyautocad を使用して AutoCAD でテキストを操作する
リンク: Python で pyautocad を使用して 2D 平面上でオブジェクトをミラーリングする
リンク: Python で pyautocad を使用した AutoCAD の長方形配列
リンク: Python で pyautocad を使用して autocad オブジェクトを操作する
リンク: Python で pyautocad を使用した AutoCAD のソリッド オブジェクト
リンク: Python で pyautocad を使用して AutoCAD でヘリックスを操作する
リンク: Python で pyautocad を使用して AutoCAD でスプラインを描画する
リンク: Python で pyautocad を使用して AutoCAD で楕円と楕円弧を描く
リンク: pyautocad を使用して AutoCAD で円弧を描く
リンク: AutoCAD ポリゴンを描画するための pyautocad のポリライン
リンク: ProModel AutoCAD エディションによるほぼ同時の工場設計とプロセス最適化
リンク: pyautocad モジュール

Linnart Felkl M.Sc.
R、SQL、VBA、Python でのシミュレーション、最適化、モデリングを専門とするデータ サイエンティスト

リンクトインレディットツイッターフェイスブックEメール
AutoCAD [EN]、Python for AutoCAD、Python [EN]autocad ,オートメーション, pyautocad , Python , pywin32



Pythonコードを自動修正するAIツール「ウルヴァリン」

2023-04-15 05:32:46 | python

GPT-4でPythonコードをエラーがなくなるまで自動修正・実行繰り返すAIツール「ウルヴァリン(Wolverine)」

GPT-4でPythonコードをエラーがなくなるまで自動修正・実行繰り返すAIツール「ウルヴァリン」 | テクノエッジ TechnoEdge

GPT-4でPythonコードをエラーがなくなるまで自動修正・実行繰り返すAIツール「ウルヴァリン」 | テクノエッジ TechnoEdge

コンピューターはプログラムコードで動作しますが、このコードは人間が記述している以上、どうしてもエラーを含んでしまうことが避けられません。

テクノエッジ TechnoEdge

やべ~なwww
これが実用化されたらPythonプログラマーとエンジニアは失業するなあwww

当然、多重偽装請負派遣は潰れるわなwww

ざまあwww

Pythonでファイルの拡張子を変換

2023-04-11 03:07:58 | python
Pythonでファイル変換

任意のファイルを読み込んで他の拡張子に変えるPythonコードを書いて

以下は、Pythonを使ってファイルを読み込み、新しい拡張子に変換する簡単なコード例です。この例では、txtファイルをcsvファイルに変換しています。

import csv

# ファイルを開く
with open('input.txt', 'r') as input_file:
# 新しいファイル名を作成
output_file_name = 'output.csv'
# 新しいファイルを作成して書き込む
with open(output_file_name, 'w', newline='') as output_file:
writer = csv.writer(output_file)
# 元のファイルを1行ずつ読み込み、新しいファイルに書き込む
for line in input_file:
row = line.strip().split(' ') # 例えば、タブ区切りのファイルをcsvに変換する場合
writer.writerow(row)
この例では、input.txtという名前のファイルを開いて、output.csvという名前の新しいファイルを作成し、それぞれのファイルに対してファイル操作を行っています。csvモジュールを使用して、csvファイルを作成していますが、他の拡張子に変更する場合は、適切なモジュールを使用する必要があります。また、ファイルの読み込みと書き込みに関しては、プログラムを実行する環境によって異なるため、必要に応じて変更する必要があります。

ん?何だか頼んでもいない余計なことまで書いているようだな。
お節介というか、いらんことすんなや。


【Pythonコードの置換 】任意のPythonコード内の文字を置換してからそのプログラムを実行する方法は?

2023-04-11 02:38:41 | python
【Pythonコードの置換】

任意のPythonプログラム内の文字を最初に他の文字に置き換えてから、そのプログラムを実行するPythonプログラムを書いて。

Pythonプログラム内の文字を置換して実行するために、以下の手順に従います。

ファイルの読み込み: open() 関数を使用してファイルを読み込みます。

with open('file.py', 'r') as f:
code = f.read()

文字列の置換: replace() メソッドを使用して、文字列内の指定された文字を置換します。

code = code.replace('old_text', 'new_text')

ファイルの書き込み: open() 関数を使用して、置換されたコードをファイルに書き込みます。

with open('file.py', 'w') as f:
f.write(code)

コードの実行: exec() 関数を使用して、置換されたコードを実行します。

exec(code)

以上の手順をまとめると、次のようになります。

with open('file.py', 'r') as f:
code = f.read()

code = code.replace('old_text', 'new_text')

with open('file.py', 'w') as f:
f.write(code)

exec(code)

ただし、この方法はコードのセキュリティを損なう可能性があるため、注意して使用する必要があります。また、適切な置換を行わない場合、プログラムの動作が変わってしまうことがあるため、慎重に検討する必要があります。

何が言いたいのかというと、
「以下のPythonプログラム内のjpyを他の文字(例えばgbp)に置き換えてから、このプログラムを実行したい。そのためにはどういうプログラムを書けば良いか?」
ということだ。
以下のPythonプログラムのファイル名をfx.pyとすると、
with open('fx.py', 'r') as f:
code = f.read()

code = code.replace('jpy', 'gbp')

with open('fx.py', 'w') as f:
f.write(code)

exec(code)
となる。

import pandas as pd
import yfinance as yf
import datetime as dt

jpy = yf.download(tickers='JPY=X',
start = '2021-01-01',
end=dt.datetime.today(),
interval='1wk' )

jpy['Performance(%)'] = (jpy['Adj Close']/jpy['Adj Close'].iloc[0]-1)*100

fig = make_subplots(rows = 2, cols=1,
vertical_spacing = 0.1,
shared_xaxes=True,
subplot_titles=['<b>USDJPY Weekly Chart', '<b>Performance(%)'])
fig.update_layout(xaxis_rangeslider=dict(visible=False))

fig.update_layout(autosize=False,
height=750,
width=900,
hovermode = 'closest',
yaxis = dict(title = 'USDJPY Rate'),
plot_bgcolor = 'white')
fig.add_trace(go.Candlestick(
x=jpy.index,
open=jpy['Open'],
high=jpy['High'],
low=jpy['Low'],
close=jpy['Adj Close'],
name = 'USDJPY'))
fig.add_trace(go.Scatter(x = jpy.index,
y = jpy['Performance(%)'],
name='Performance(%)',
line = dict(color = 'blue')),
row = 2,
col = 1)
fig.add_annotation(text='<b>2021年以降<br>対米ドルで円安が急速に進行中',
showarrow=False, x=dt.datetime(2021,10,31),
y=135,
align='left', font=dict(size=18,color='black'))
fig.show()

【後談】
tickers='JPY=X'のJPYはinput関数を使って入力を求めるように書き換えれば置換することができたが、jpyの部分は同じ様にinput関数で入力を求めて置換することがどうしてもできなかった。
それをどうすれば解決できるかChatGPTに質問してみたというわけだ。

ちなみにこのプログラムがエラー無しで実行可能であるならば、置換前の元のプログラムは破壊されて機能しないリスクがあるらしい。


GUI作成ライブラリwxPythonの使い方

2023-04-02 02:48:46 | python

【 Python 】 かっこいいGUI wxPythonの使い方入門 その1|Zero-Cheese

【 Python 】 かっこいいGUI wxPythonの使い方入門 その1|Zero-Cheese

Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。

Zero-Cheese

pip install wxPython

でライブラリーをインストール。

プログラムの上部に「import wx」と入力。

その他wxPythonについてのリンク

https://www.google.com/search?q=wx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%83%BC+Python&client=ms-android-sharp&sxsrf=APwXEddegoUkaSX2aYrgfurutF_3vNtuSA%3A1680370738472&ei=MmwoZIKaHPrM2roP_N-zkAI&oq=wx%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%83%BC+Python&gs_lcp=ChNtb2JpbGUtZ3dzLXdpei1zZXJwEAMyBQgAEKIEMgUIABCiBDIFCAAQogQ6CggAEEcQ1gQQsAM6CAgAEIkFEKIESgQIQRgAUMsZWOUtYPExaAFwAHgAgAHXAYgB_gSSAQUxLjIuMZgBAKABAcgBCsABAQ&sclient=mobile-gws-wiz-serp#ip=1


モルワイデ図法で世界地図を描画するPythonプログラム

2023-03-25 19:57:03 | python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# モルワイデ図法で世界地図を描画
m = Basemap(projection='moll', lon_0=0, resolution='c')

# 海岸線を描画
m.drawcoastlines(linewidth=0.5)

# 国境線を描画
m.drawcountries(linewidth=0.5)

# 緯度・経度のグリッド線を描画
m.drawparallels(np.arange(-90, 90, 30), labels=[1,0,0,0], fontsize=10)
m.drawmeridians(np.arange(-180, 180, 60), labels=[0,0,0,1], fontsize=10)

# プロットを表示
plt.show()


世界地図を描くpythonプログラム

2023-03-25 15:53:20 | python

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

# 地図の設定(横メルカトル図法)
m = Basemap(projection='merc', llcrnrlat=-80, urcrnrlat=80,
llcrnrlon=-180, urcrnrlon=180, lat_ts=20, resolution='c')

# 国境線の描画
m.drawcoastlines()
m.drawcountries()

# ラベルの描画
m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='coral',lake_color='aqua')

# 地図の表示
plt.show()

ChatGPT Very Good Job!!!


PythonでB♭の音を鳴らすプログラム

2023-03-25 14:30:57 | python

import numpy as np
from scipy.io import wavfile

frequency = 471.0  # 生成するサイン波の周波数
seconds = 10.0      # 生成する音の秒数
rate = 47100       # 出力する wav ファイルのサンプリング周波数

phases = np.cumsum(2.0 * np.pi * frequency / rate * np.ones(int(rate * seconds)))
# 波形を生成
wave = np.sin(phases)  # -1.0 〜 1.0 の値のサイン波
# import scipy.signal して、
# wave = scipy.signal.sawtooth(phases) とすると鋸歯状波、
# wave = scipy.signal.square(phases) とすると矩形波になる

# 16bit の wav ファイルに書き出す
wave = (wave * float(2 ** 15 - 1)).astype(np.int16)  # 値域を 16bit にする
wavfile.write("sine.wav", rate, wave)

ちなみに

frequency = 441.0  
rate = 44100    にするとAの音になる。

frequency = 396.0  
rate = 39600  ならG

frequency = 417.0  
rate = 41700  ならG♯

frequency = 369.0  
rate = 36900  ならF♯

frequency = 349.3  
rate = 34930  ならF

 


インストールされているライブラリーをリストアップするPythonプログラム

2023-03-25 11:59:06 | python
端末内のインストールされているPythonライブラリーを自動で調べてリストアップするPythonプログラムを作って

import subprocess

# pipコマンドを使用して、端末内にインストールされているパッケージを取得する
output = subprocess.check_output(['pip', 'freeze']).decode()
installed_packages = [line.split('==')[0] for line in output.split('\n') if line]

# インストールされているパッケージのリストを出力する
print('Installed packages:')
for package in installed_packages:
print(package)




ChatGPT Good Job!