はじめに

ここは学習用および実験的プログラミングネタ置き場です。
サンプルコードはご自由にお使いください。


Python学習編

使用方法

各コードをファイルに名前をつけて保存し、
chmod +x ファイル名.pyで実行権限を付与。
ターミナルで./ファイル名.pyで実行します。


Hello,World

シンプルなプリント文

#!/usr/bin/python3

print("Hello,World!!\n")

変数を代入するプリント文

#!/usr/bin/python3

hello="Hello,World"
print(hello)

文字列を制御

特定文字列のフィルタリング

#!/usr/bin/python3
#
a = "SRC=192.168.x.x"
print (a.strip("SRC="))
192.168.x.x

0埋め

#!/usr/bin/python3
#
a="1"
print(a.zfill(3))
001

Main関数を使う

#!/usr/bin/python3
#
def Hello(str):
        print(str)
#
if __name__ == '__main__':
        Hello("Hello,Python!!\n")

独自関数

#!/usr/bin/python3

number1 = 12
number2 = 34

def add(num1,num2):
    num=num1+num2
    return(num)

def output(num):
    print(num)

total = add(number1,number2)

output(total)

ファイル入出力

読み込み

ファイルを読み込んで内容を表示する。

#!/usr/bin/python3
file = open("Hello.txt",r)
print(file.read())
file.close()

CSV読み込み

#!/usr/bin/python3

import csv

filename='test.csv'
with open(filename) as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

書き込み

ファイルをに書き込む。

#!/usr/bin/python3

file = open("Hello.txt",w)
file.write("hello, ")
file.write("World")
file.write("\n")
file.close()

withを使う

with open("sample.txt", mode="a") as f:
    f.write("sample01\n")
    f.write("sample02\n")

withを使う※例外処理

file = open("sample.txt", mode="a")
try:
    file.write("sample01\n")
    file.write("sample02\n")
finally:
    file.close()

ファイルの存在チェック

#!/usr/bin/python3
#
import os
#
filename='Hello.txt'
if(os.path.exists(filename)):
    fileobj = open(filename)
    data = fileobj.read()
    fileobj.close()
    print(data)
else:
    print filename + " is not found\n"

繰り返し文

#!/usr/bin/python3

i = 0
while i < 10:
    print("Hello,World!!")
    i += 1

条件分岐(if)

if row[0]=='Dec':
     if (len(row))>19:
          ip_dport.append(row[19].strip("DPT="))
     ip_list = ("2021"+"-"+trans_word(row[0])+"-"+row[1].zfill(2),row[2].zfill(2),row[10].strip("SRC="))


if row[0]!='Dec':
     if (len(row))>17:
          ip_dport.append(row[17].strip("DPT="))
     ip_list = ((row[0][0:10]),row[8].strip("SRC="))

現在時刻表示

#!/usr/bin/python3

import datetime
dt_now = datetime.datetime.now()
print(dt_now)

MySQL/mariaDB接続

$ pip install PyMySQL

###----- 接続情報(共通)

import pymysql.cursors

conn = pymysql.connect(user = 'username',
                       password = 'pass',
                       host = 'localhost',
                       db = 'dbname',
                       charset='utf8mb4')

###----- insert 文

con = conn.cursor()
sql = "insert into `table_name` (`col1`,`col2`,`col3`,`col4`,`col5`) values(%s,%s,%s,%s,%s)"
con.execute(sql,(col1,col2,col3,col4,col5))
conn.commit()
con.close()

###----- select文

con = conn.cursor()
sql = "select col1, col2 FROM table_name WHERE col1 = %s"
con.execute(sql, ('row',))
result = con.fetchall()
print(result)
con.close()

【サンプル】

IPアドレスから国、都市名検索(GeoIP2)

#!/usr/bin/python3

import os
import ipaddress
import geoip2.database
from itertools import groupby
from operator import itemgetter
#
gipcountry = geoip2.database.Reader("/home/share3/GeoIP2/GeoLite2-Country.mmdb")
gipcity = geoip2.database.Reader("/home/share3/GeoIP2/GeoLite2-City.mmdb")
#-----------------------------------------------------------------------
def trans_geoip(ip_addr):
    if '192.168.1.' in ip_addr:
        return ('Private')
    try:
        response = gipcountry.country(ip_addr)
        return (response.country.names['ja'])
    except:
        pass
#-----------------------------------------------------------------------
def trans_geoipcity(ip_addr):
    if '192.168.1.' in ip_addr:
        return ('Private')
    try:
        response = gipcity.city(ip_addr)
        return (response.city.names['ja'])
    except:
        pass
#-----------------------------------------------------------------------
ip_addr="xxx.xxx.xxx.xxx"
ip_country=(trans_geoip(ip_addr))
ip_city=(trans_geoipcity(ip_addr))
ip_list=[ip_country,ip_city,ip_addr]
print(ip_list)

IPアドレスから緯度経度抽出してMAP生成(GeoIP2)

#!/usr/bin/python3

import cgitb
cgitb.enable()
import sys
import os
import folium
import geoip2.database
#
gipcity = geoip2.database.Reader("/usr/share/GeoIP/GeoLite2-City.mmdb")
mappath='/var/www/vhost/osmaniax.1banzaka.com/pythonlabo/'
#
print("Content-Type:text/html;charset=utf-8\n")
print("<Head>")
print('<meta http-equiv="refresh" content="1;URL=map.html">')
print("<title>Hello,Python World</title>")
print("</Head>")
print("<H1>Hello,Python World</H1>")
#
for param in os.environ.keys():
   env = (param, os.environ[param])

REMOTE_ADDR = (param, os.environ['REMOTE_ADDR'])
GEO_LATITUDE = (param, os.environ['HTTP_GEOIP_LATITUDE'])
GEO_LONGITUDE = (param, os.environ['HTTP_GEOIP_LONGITUDE'])
ip_addr = REMOTE_ADDR[1]
folium_map= folium.Map(location=[GEO_LATITUDE[1],GEO_LONGITUDE[1]],zoom_start=15)
folium.Marker(location=[GEO_LATITUDE[1],GEO_LONGITUDE[1]]).add_to(folium_map)
folium_map.save('map.html')
print("<hr>")
if '192.168.1.' in ip_addr:
    print("Local-IP")
print('<a href="map.html">map link</a>')

Pythonでメール送信する方法

PythonでmariaDBの重複データを削除する