Paepoi

Paepoi » Python Tips » Python 基本

Python 基本

最終更新日 2019.03.31
文字列色々
#!/usr/bin/env python3

STR = '漢字も一文字だもん!'

a = STR[3:6]  # (開始位置 ,終了位置)
b = STR[3:-3] # (開始位置 ,行末からの終了位置)
c = STR[3:]   # (開始位置から最後まで)
d = STR[:-3]  # (先頭から行末からの終了位置)
print(a, b, c, d)
#=> 一文字 一文字だ 一文字だもん! 漢字も一文字だ

# 検索
print(STR.startswith('漢字')) # 最初
#=>True
print(STR.endswith('もん!')) # 最後
#=>True
print(STR.find('も')) # 最初の出現位置、存在しなければ -1 が戻る
#=>2
print(STR.rfind('も')) # 最後の出現位置、存在しなければ -1 が戻る
#=>7
print('もん' in STR)   # 含まれている?
#=>True
print(STR.replace('もん', 'モン')) # 変換
#=>漢字も一文字だモン!

print('ABCdef'.lower());
#=>abcdef
print('ABCdef'.upper());
#=>ABCDEF

# 先頭や末尾の IFS を取り除く
s = '  ai ueo  \n'
# 先頭と末尾
print(s.strip())  #=> 'ai ueo'
# 先頭のみ
print(s.lstrip()) #=> 'ai ueo  \n'
# 末尾のみ
print(s.rstrip()) #=> '  ai ueo'


# 文字コード変換
utf8str = '文字列をUTF-8に'.encode('utf-8')
ucs4str = utf8str.decode('utf-8')
print(ucs4str); # Python3 文字列は UCS-4(UTF32)

# 文字列を配列に
inLF = '''スズキの
バイクは
カッコイイ'''
arr = inLF.split('\n')
print(arr)
#=> [スズキの, バイクは, カッコイイ]

# 配列を文字列に
st = ''.join(arr)
print(st);
#=> スズキのバイクはカッコイイ

# コードポイントを UNICODE 文字に変換
# JavaScript では String.fromCharCode(97);
print(chr(97))
#=> 'a'

# UNICODE 文字をコードポイントに変換
# JavaScript では String.charCodeAt('a');
print(ord('a'))
#=> 97

# 文字列を逆転
s = 'あいうえお'
print(s[::-1])
#=>おえういあ

ファイル名色々
#!/usr/bin/env python3

import os

PATH = '/home/suzuki/バイク/カッコイイ.txt'

print(os.path.exists(PATH))
#=> 存在すれば True

print(os.path.basename(PATH))
#=> カッコイイ.txt

print(os.path.dirname(PATH))
#=> /home/suzuki/バイク

print(os.path.split(PATH))
#=> ('/home/suzuki/バイク', 'カッコイイ.txt')

print(os.path.splitext(PATH))
#=> ('/home/suzuki/バイク/カッコイイ', '.txt')

# 以下はカレントディレクトリが /home/suzuki/バイク の場合

print(os.path.expanduser('~/変態.bike'))
#=> /home/suzuki/変態.bike

print(os.path.abspath('ダサい.bike'))
#=> /home/suzuki/バイク/ダサい.bike

print(os.path.relpath('/home/suzuki/カッコワルイ.txt'))
#=> ../カッコワルイ.txt

配列と連想配列
#!/usr/bin/env python3

# 配列宣言
ar = [1,2,3]
# 追加
ar.append(7) #=> [1,2,3,7]
# 前方に追加、書き換えではない
ar.insert(0, 6) #=> [6,1,2,3,7]
# 書き換え
ar[1] = 44 #=> [6,44,2,3,7]
# 削除、3 番目を取り除く、先頭はゼロ
del ar[2] #=> [6,44,3,7]
# 要素数
len(ar) #=> 4
# 合体
ar2 = [99,87]
ar2.extend(ar)
print(ar2) #=> [99,87,6,44,3,7]
# 含まれている?
if 44 in ar2:
    # 何番目にある?
    print(ar2.index(44)) #=> 3

#
# 辞書(連想配列)
#

# 静的宣言
dic = {
    'YES': 'Close to the Edge',
    'King Crimson': 'In The Court Of The Crimson King'
}
# 関数で、こちらはキーを文字列にしなくてもいい
dic2 = dict(
    PFM='Photos of Ghosts',
    Osanna='Palepli'
)
# 合体
dic.update(dic2)
# 書き換え
dic['YES'] = '90125'
# 追加
dic['EL&P'] = 'Tarkus'
# 削除
del dic['King Crimson']
# キーが存在する?
if 'YES' in dic:
    # 取り出し
    print(dic['YES']) #=> 90125
# for
for key in dic.keys():
    print('{}: {}'.format(key, dic[key]))
'''output
YES: 90125
PFM: Photos of Ghosts
Osanna: Palepli
EL&P: Tarkus
'''

アスタリスク
#!/usr/bin/env python3

'''
    関数の引数で * が一つならリスト、二つなら辞書という扱い
    呼び出し時の引数に明示的な [], {} は不要
'''

def list_func(*argv):
    for item in argv:
        print('{0}'.format(item))

def dict_func(**argv):
    for key, value in argv.items():
        print('{0}: {1}'.format(key, value))

list_func(1, 'a', 3)
dict_func(yamaha='Jog', honda='Dio')

for ループ(同時、インデックス)
#!/usr/bin/env python3

MOTORS = ['YAMAHA', 'HONDA', 'SUZUKI', 'KAWASAKI']
CYCLES = ['NIKEN', 'Super Cub', '刀', 'Z900RS']

# synchronous loop
for motor, cycle in zip(MOTORS, CYCLES):
    print('{0}: {1}'.format(motor, cycle))

# index
for i, cycle in enumerate(CYCLES):
    print('{0:03d}: {1}'.format(i, cycle))

引数から自分を取り除く
#!/usr/bin/env python3

import sys

args = sys.argv[1:]
for s in args:
    print(s)

処理時間を計る
#!/usr/bin/env python3

import time

start = time.time()
'''
    処理時間を計りたいコード
'''
print(time.time() - start)

タイマー
#!/usr/bin/env python3

import threading

class MyTimer:
    def __init__(self):
        self.count = 0
        self.start_func()

    def start_func(self):
        '''
            2s 毎に print する
            5 回で終了
        '''
        print('Count {0}'.format(self.count))
        if self.count < 5:
            self.count += 1
            t = threading.Timer(2.0, self.start_func)
            t.start()

MyTimer()

四捨五入
#!/usr/bin/env python3

import math

n = 3.14
print('{0},{1},{2}'.format(
    round(n),       # 四捨五入、math 不要
    math.ceil(n),   # 切り上げ
    math.floor(n))) # 切り捨て

#=>3,4,3

三項演算子
#!/usr/bin/env python3

num = 0
# なんやかんやで num を弄った後
res = 'ゼロです' if num == 0 else 'ゼロではありません'
print(res)

正規表現
#!/usr/bin/env python3

import re

for s in ['001.jpg', '002.JPEG', '003.Png', '004.gif', 'jpeg.gif']:
    '''
        大文字小文字を区別せず jpg, jpeg, png の拡張子を見つける例
        r'' に注意
    '''
    if re.search(r'\.(jpe?g|png)$', s, re.I):
        print(s)

Fizz Buzz の例
#!/usr/bin/env python3

'''
    3 で割り切れる場合は Fizz
    5 で割り切れる場合は Buzz
    両者で割り切れる場合は Fizz Buzz というゲーム
'''

for i in range(1, 101):
    if i % 3 ==0:
        if i % 5 == 0:
            print('FizzBuzz')
        else:
            print('Fizz')
    elif i % 5 == 0:
        print('Buzz')
    else:
        print(i)

Easter Egg
#!/usr/bin/env python3

import __hello__
import antigravity

Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.