Pythonは、読みやすく書きやすいプログラミング言語です。
スクリプト型のため、素早く実行することができ、初心者から上級者まで幅広い層のエンジニアに活用されています。
Pythonは、様々な用途で利用されているため、プログラミングでPythonを扱うことができれば、幅広い分野で活用することができます。
本記事では、Pythonのソースコードの書き方について紹介します。
Pythonのソースコードの書き方を紹介します
- Pythonとは
- Pythonの環境構築
- Pythonのソースコードの書き方
Pythonとは
Pythonは、スクリプト型のプログラミング言語です。
読みやすく、書きやすいコードを意識して設計されており、初心者からプロフェッショナルまで幅広い層に利用されています。
Pythonはオープンソースなので、無料で利用できます。
Pythonの特徴
Pythonは、以下の特徴があります。
- 簡潔で読みやすい文法
- 豊富なライブラリ
- 多様なOSで動作可能
- 多様な用途で利用可能
Pythonは、読みやすく書きやすいため、エンジニアにとって扱いやすいプログラミング言語です。
豊富なライブラリが提供されているため、ゼロから開発しなくても、多くの機能を実装することができます。
Web開発、データサイエンス、人工知能など、様々な分野で利用されているため、汎用性の高いプログラミング言語です。
Pythonの環境構築
Pythonを利用するためには、環境を構築する必要があります。
Pythonのインストール
まず、Python自体をインストールします。
コマンドライン
sudo apt install python3
Pythonライブラリのインストール
Pythonでは、豊富なライブラリが提供されています。
必要なライブラリをインストールして、利用可能にすることで、プログラミングで動作できる機能を拡張することができます。
コマンドライン
pip install [ライブラリ名]
Pythonのバージョン管理
Pythonは、常にバージョンアップされています。
インストールされているPythonのバージョンを管理することで、適切な開発ができるようにします。
コマンドライン
python3 --version
Pythonのソースコードの書き方
Pythonのソースコードの書き方を紹介します。
基本機能
Pythonの基本機能を紹介します。
データ型
Pythonで扱えるデータ型を紹介します。
データ型 | 表記方法 | 意味 |
---|---|---|
整数型 | int | 整数を表現できます。 |
浮動小数点型 | float | 小数点を含む数値を表現できます。 |
文字列型 | str | 文字列を表現できます。 |
ブーリアン型 | bool | 真(True)または偽(False)を表現できます。 |
リスト型 | list | 複数の値を配列で保持します。 |
タプル型 | tuple | 変更不能な複数の値を保持します。 |
辞書型 | dict | キーと値のペアを保持します。 |
変数定義
Pythonでは、データを変数で管理します。
構文
[変数名] = [値]
ソースコード
age = 10
演算
Pythonでは数値計算することができます。
計算内容 | 演算子 |
---|---|
足し算 | + |
引き算 | – |
掛け算 | * |
割り算 | / |
割り算(整数) | // |
余り計算 | % |
べき乗 | ** |
ソースコード
a = 5 + 3 # 8
Pythonでは、ビット計算も行うことができます。
計算内容 | 演算子 |
---|---|
AND演算 | & |
OR演算 | |
XOR演算 | ^ |
NOT演算 | ~ |
左シフト演算 | << |
右シフト演算 | >> |
ソースコード
b = 0b1100 & 0b1010 # 0b1000 (8)
繰り返し制御
Pythonでは、for文やwhile文で繰り返し制御(ループ処理)が実行できます。
for文の繰り返し制御を紹介します。
構文
for [要素] in [イテラブル]:
実行する処理
ソースコード
for i in range(5):
print(i)
while文の繰り返し制御を紹介します。
構文
while [条件]:
実行する処理
ソースコード
count = 0
while count < 5:
print(count)
count += 1
条件制御
Pythonでは、if文で条件制御を行うことができます。
扱える条件演算子を紹介します。
演算子 | 意味 |
---|---|
== | 等しい |
!= | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
if文で条件制御を実行できます。
構文
if [条件]:
実行する処理
ソースコード
a = 20
if a >= 18:
print("18以上です")
例外処理
Pythonでは、予期せぬエラーを例外処理として制御することができます。
基本的な例外処理を紹介します。
構文
try:
実行する処理
except [例外の種類]:
例外が発生した場合に実行する処理
ソースコード
try:
result = 10 / 0
except ZeroDivisionError:
print("0で割ることはできません")
関数定義
Pythonでは、関数を定義することができます。
構文
def 関数名([引数1], [引数2], ...):
関数の処理
return 戻り値
ソースコード
def greet(name):
return f"Hello, {name}!"
print(greet("yasuhira")) # 出力: Hello, yasuhira!
クラス定義
Pythonは、オブジェクト指向プログラミングをサポートしており、クラスを定義することができます。
クラスとは、オブジェクト指向プログラミングで利用する、属性(データ)とメソッドを組み合わせたブロックです。
基本的なクラス定義について紹介します。
構文
class [クラス名]:
def __init__(self, [引数1], [引数2], ...):
self.属性1 = 引数1
self.属性2 = 引数2
...
def [メソッド名](self, [引数1], [引数2], ...):
メソッドの処理
ソースコード
class Tanuki:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"Hello, I am {self.name}, I am {self.age} years old."
yasuhira = Tanuki("yasuhira", 10)
print(yasuhira.greet()) # 出力: Hello, I am yasuhira, I am 10 years old.
モジュール制御
Pythonでは、他のプログラムからインポートして、利用できる仕組みがあります。
モジュールを利用することで、ソースコードが簡素化して、メンテナンスがしやすくなります。
構文
import [モジュール名]
ソースコード
import math
print(math.sqrt(16)) # 出力: 4.0
標準機能
Pythonで利用できる標準機能の使い方を紹介します。
コメント
Pythonではソースコードにコメントを記述することができます。
ソースコード
# ユーザーの名前を入力
name = input("Enter your name: ")
ファイル読み込み/書き込み
ファイル読み込み/書き込みは、ファイルオープンでファイルを開いて制御します。
ファイルオープンのモードを紹介します。
モード | 意味 |
---|---|
r | 読み込みモード |
w | 書き込みモード |
a | 追記モード |
ファイル読み込みの方法を紹介します。
ソースコード
# ファイルを読み込みモードで開く
with open('hogehoge.txt', 'r') as file:
content = file.read()
print(content)
ファイル書き込みの方法を紹介します。
ソースコード
# ファイルを書き込みモードで開く
with open('hogehoge.txt', 'w') as file:
file.write('Hello, world!')
ライブラリ機能
Pythonで利用できるライブラリの使い方を紹介します。
スリープ処理(time)
スリープ処理は、指定時間待つ処理です。
ソースコード
import time
time.sleep(5) # 5秒間スリープ
日時取得
日時を取得することができます。
ソースコード
from datetime import datetime
# 現在の日時を取得
now = datetime.now()
# フォーマット指定で表示
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_time)
子プロセス管理(subprocess)
子プロセス管理は、外部プロセスを実行することができます。
ソースコード
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
乱数処理(random)
乱数処理は、乱数を使って制御することができます。
ソースコード
import random
# 1から10までの整数の乱数を生成
random_integer = random.randint(1, 10)
ログ出力(logging)
ログを出力できます。
ソースコード
import logging
# ファイルにログを保存
logging.basicConfig(
filename='debug.log',
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(filename)s:%(lineno)d %(funcName)s %(message)s",
datefmt="[%Y-%m-%d %H:%M%S]"
)
logging.debug('デバッグメッセージを出力')
logging.info('情報メッセージを出力')
logging.warning('警告メッセージを出力')
logging.error('エラーメッセージを出力')
logging.critical('重大なエラーメッセージを出力')
スレッド処理(threading)
threadingでスレッドを並行処理します。
ソースコード
import threading
def task():
print("タスクが実行されました")
# スレッドの作成
thread = threading.Thread(target=task)
# スレッドの開始
thread.start()
# メインスレッドが終了するまで待機
thread.join()
SFTPファイル転送(paramiko)
paramikoでSFTPファイル転送します。
ソースコード
import paramiko
# 認証情報
host = '111.111.111.111'
port = 65535 # ポートを指定
username = 'user'
private_key = '/home/user/.ssh/id_rsa' # 認証鍵ファイル
# ローカルファイルとリモートの保存先
local_file = '/home/user/hogehoge.txt'
remote_path = '/home/user/hogehoge.txt'
# SFTP接続を確立
try:
key = paramiko.RSAKey.from_private_key_file(private_key)
transport = paramiko.Transport((host, port))
transport.connect(username=username, pkey=key)
# SFTPセッションを開く
sftp = paramiko.SFTPClient.from_transport(transport)
# ファイルをアップロード
sftp.put(local_file, remote_path)
print(f"File {local_file} has been successfully uploaded to {remote_path}")
finally:
sftp.close()
transport.close()
GUI処理(tkinter)
tkinterでGUIを作成します。
ソースコード
import tkinter as tk
root = tk.Tk()
root.geometry("400x400")
root.mainloop()
音楽ファイル再生(playsound)
playsoundライブラリは、音楽ファイルを再生できます。
ソースコード
from playsound import playsound
playsound("sample.wav")
音楽ファイル制御(pygame)
Pygemeライブラリは、ゲームを作成できるライブラリですが、音楽ファイルを制御できます。
ソースコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import pygame
class MusicPlayer:
def __init__(self):
pygame.init()
pygame.mixer.init()
self.paused = False
def play_music(self, file_path):
try:
pygame.mixer.music.load(file_path)
pygame.mixer.music.play()
except Exception as e:
print("Error:", e)
def stop_music(self):
pygame.mixer.music.stop()
print("Music stopped")
def pause_music(self):
pygame.mixer.music.pause()
self.paused = True
print("Music paused")
def unpause_music(self):
pygame.mixer.music.unpause()
self.paused = False
print("Music resumed")
def status_music(self, file_path):
if pygame.mixer.music.get_busy() and not self.paused:
status = True
else:
status = False
return status
録音制御(pyaudio)
PyAudioライブラリで、録音制御ができます。
ソースコード
import pyaudio
import wave
import numpy as np
# 録音の設定
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
SILENCE_THRESHOLD = 500 # 無音のしきい値(音量)
SILENCE_DURATION = 30 # 無音と判定する持続時間(フレーム数)
# 音声を録音する関数
def record_audio():
audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE,
input=True, frames_per_buffer=CHUNK)
print("Recording started...")
frames = []
silence_frames = 0
recording = False
while True:
data = stream.read(CHUNK)
audio_data = np.frombuffer(data, dtype=np.int16)
# 音声が無音かどうかを判定
if np.abs(audio_data).mean() > SILENCE_THRESHOLD:
if not recording:
print("Voice detected, recording...")
recording = True
frames.append(data)
silence_frames = 0
else:
if recording:
silence_frames += 1
if silence_frames > SILENCE_DURATION:
print("Silence detected, stopping...")
break
frames.append(data)
stream.stop_stream()
stream.close()
audio.terminate()
# 録音結果を保存
wf = wave.open("output.wav", 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
print("Recording finished and saved as 'output.wav'")
if __name__ == "__main__":
record_audio()
音声認識(Whisper)
Whisperライブラリで、音声認識ができます。
ソースコード
import whisper
# Whisperモデルのロード
model = whisper.load_model("base")
# 音声ファイルのパス
audio_path = "input.wav"
# 音声認識を実行
result = model.transcribe(audio_path, language="ja")
# 結果を表示
print(result["text"])
音声認識(Faster Whisper)
Faster Whisperライブラリで、音声認識ができます。
ソースコード
from faster_whisper import WhisperModel
# モデルの読み込み
model = WhisperModel("base", device="cpu")
# 音声ファイルのパス
audio_file = "output.wav"
# 音声認識の実行
segments, info = model.transcribe(audio_file, language="ja")
# 結果を表示
print(f"Detected language: {info.language}")
for segment in segments:
print(f"[{segment.start:.2f}s - {segment.end:.2f}s] {segment.text}")
音声合成(Open JTalk)
Open JTalkライブラリで、音声合成ができます。
ソースコード
import subprocess
def open_jtalk_tts(text):
open_jtalk=['open_jtalk']
mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','output.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
subprocess.run(cmd,input=text.encode())
if __name__ == '__main__':
open_jtalk_tts("テスト")
音声合成(VOICEVOX)
VOICEVOXライブラリで、音声合成ができます。
ソースコード
from pathlib import Path
import voicevox_core
from voicevox_core import AccelerationMode, AudioQuery, VoicevoxCore
speaker_id = 2
open_jtalk_dict_dir = './open_jtalk_dic_utf_8-1.11'
out = Path('output.wav')
acceleration_mode = AccelerationMode.AUTO
def voicevox_core_tts(text, speaker_id):
core = VoicevoxCore(
acceleration_mode=acceleration_mode, open_jtalk_dict_dir=open_jtalk_dict_dir
)
core.load_model(speaker_id)
audio_query = core.audio_query(text, speaker_id)
wav = core.synthesis(audio_query, speaker_id)
out.write_bytes(wav)
if __name__ == "__main__":
voicevox_core_tts("テスト", 2)
まとめ
Pythonのソースコードの書き方を紹介しました。
- 環境構築が必要
- 構文を用いてプログラミングができる
- ライブラリを用いてプログラミングができる
Pythonでは、基本構文やライブラリを用いてプログラミングを行います。
本記事では、各制御のサンプルプログラムを紹介していますが、リンク先の記事により詳細なプログラミング方法を紹介しています。
本記事が、プログラミングの参考になれば嬉しいです。