10. æ¨æºã©ã¤ãã©ãªãããã¢ã¼Â¶
10.1. OSã¸ã®ã¤ã³ã¿ã¼ãã§ã¼ã¹Â¶
os ã¢ã¸ã¥ã¼ã«ã¯ããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã¨å¯¾è©±ããããã®å¤ãã®é¢æ°ãæä¾ãã¦ãã¾ã:
>>> import os
>>> os.getcwd() # Return the current working directory
'C:\\Python314'
>>> os.chdir('/server/accesslogs') # Change current working directory
>>> os.system('mkdir today') # Run the command mkdir in the system shell
0
from os import * ã§ã¯ãªãã import os å½¢å¼ã使ãããã«ãã¦ãã ããããããããã¨ã§ãåä½ã大ããç°ãªãçµã¿è¾¼ã¿é¢æ° open() ã os.open() ã§é®è½ãããã®ãé¿ãããã¾ãã
çµã¿è¾¼ã¿é¢æ° dir() ããã³ help() ã¯ã os ã®ãããªå¤§è¦æ¨¡ãªã¢ã¸ã¥ã¼ã«ã§ä½æ¥ãããã¨ãã«ã対話çãªæä½ä¸ã®å©ãã«ãªãã¾ã:
>>> import os
>>> dir(os)
<OSã¢ã¸ã¥ã¼ã«ã®é¢æ°ãã¹ã¦ã®ãªã¹ããè¿ã>
>>> help(os)
<ã¢ã¸ã¥ã¼ã«ã® docstring ããçæããã詳細ãªããã¥ã¢ã«ãè¿ã>
ãã¡ã¤ã«ããã£ã¬ã¯ããªã®æ¥å¸¸çãªç®¡ç使¥ã®ããã«ãããç°¡åã«ä½¿ãã髿°´æºã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ã shutil ã¢ã¸ã¥ã¼ã«ã§æä¾ããã¦ãã¾ã:
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
'archive.db'
>>> shutil.move('/build/executables', 'installdir')
'installdir'
10.2. ãã¡ã¤ã«ã®ã¯ã¤ã«ãã«ã¼ã表è¨Â¶
glob ã¢ã¸ã¥ã¼ã«ã§ã¯ããã£ã¬ã¯ããªã®ã¯ã¤ã«ãã«ã¼ãæ¤ç´¢ãããã¡ã¤ã«ã®ãªã¹ããçæããããã®é¢æ°ãæä¾ãã¦ãã¾ã:
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
10.3. ã³ãã³ãã©ã¤ã³å¼æ°Â¶
ä¸è¬çãªã¦ã¼ãã£ãªãã£ã¹ã¯ãªããã§ã¯ãããã³ãã³ãã©ã¤ã³å¼æ°ãæ±ãå¿
è¦ãããã¾ããã³ãã³ãã©ã¤ã³å¼æ°ã¯ ã¢ã¸ã¥ã¼ã«ã® argv 屿§ã«ãªã¹ãã¨ãã¦ä¿åããã¦ãã¾ããä¾ã¨ãã¦ä»¥ä¸ã® demo.py ãã¡ã¤ã«ãè¦ã¦ã¿ã¾ããã:
# File demo.py
import sys
print(sys.argv)
以ä¸ã¯ãã³ãã³ãã©ã¤ã³ä¸ã§ python demo.py one two three ã¨å®è¡ããæã®åºåã§ã:
['demo.py', 'one', 'two', 'three']
argparse ã¢ã¸ã¥ã¼ã«ã¯ãã³ãã³ãã©ã¤ã³å¼æ°ãå¦çããããã®æ´ã«æ´ç·´ãããä»çµã¿ãæä¾ãã¾ããæ¬¡ã®ã¹ã¯ãªããã¯1ã¤ä»¥ä¸ã®ãã¡ã¤ã«åãæ½åºãããªãã·ã§ã³ã§è¡æ°ã表示ãã¾ãã
import argparse
parser = argparse.ArgumentParser(
prog='top',
description='Show top lines from each file')
parser.add_argument('filenames', nargs='+')
parser.add_argument('-l', '--lines', type=int, default=10)
args = parser.parse_args()
print(args)
ã³ãã³ãã©ã¤ã³ã§ python top.py --lines=5 alpha.txt beta.txt ãå®è¡ããã¨ãä¸ã®ã¹ã¯ãªãã㯠args.lines ã 5 ã args.filenames ã ['alpha.txt', 'beta.txt'] ã«è¨å®ãã¾ãã
10.4. ã¨ã©ã¼åºåã®ãªãã¤ã¬ã¯ãã¨ããã°ã©ã ã®çµäºÂ¶
sys ã¢ã¸ã¥ã¼ã«ã«ã¯ã stdin, stdout, stderr ã表ã屿§ãåå¨ãã¾ãã stderr ã¯ãè¦åãã¨ã©ã¼ã¡ãã»ã¼ã¸ãåºåãã¦ã stdout ããªãã¤ã¬ã¯ããããå ´åã§ãèªããããã«ããããã«ä¾¿å©ã§ã:
>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one
sys.exit() ã¯ãã¹ã¯ãªãããçµäºããããã£ã¨ãç´æ¥çãªæ¹æ³ã§ãã
10.5. æååã®ãã¿ã¼ã³ãããã³ã°Â¶
re ã¢ã¸ã¥ã¼ã«ã§ã¯ãããé«åº¦ãªæååå¦çã®ããã®æ£è¦è¡¨ç¾ãæä¾ãã¦ãã¾ããæ£è¦è¡¨ç¾ã¯è¤éãªä¸è´æ¤ç´¢ãæä½ã«å¯¾ãã¦ç°¡æ½ã§æé©åããã解決çãæä¾ãã¾ã:
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
æå°éã®æ©è½ã ããå¿ è¦ãªããèªã¿ããããããã°ããããæååã¡ã½ããã®æ¹ããå§ãã§ã:
>>> 'tea for too'.replace('too', 'two')
'tea for two'
10.6. æ°å¦Â¶
math ã¢ã¸ã¥ã¼ã«ã¯ãæµ®åå°æ°ç¹æ¼ç®ã®ããã® C è¨èªã©ã¤ãã©ãªé¢æ°ã«ã¢ã¯ã»ã¹ããææ®µãæä¾ãã¦ãã¾ã:
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
random ã¢ã¸ã¥ã¼ã«ã¯ãä¹±æ°ã«åºã¥ããè¦ç´ 鏿ã®ããã®ãã¼ã«ãæä¾ãã¦ãã¾ã:
>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10) # éè¤ãªãã§ãµã³ããªã³ã°
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random() # [0.0, 1.0) ã®åºéå
ã®ã©ã³ãã 㪠float
0.17970987693706186
>>> random.randrange(6) # range(6) ããã©ã³ãã ã«é¸ã°ãã integer
4
statistics ã¢ã¸ã¥ã¼ã«ã¯æ°å¤ãã¼ã¿ã®åºç¤çãªçµ±è¨çç¹æ§ï¼å¹³åãä¸å¤®å¤ã忣çï¼ãè¨ç®ãã¾ã:
>>> import statistics
>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> statistics.mean(data)
1.6071428571428572
>>> statistics.median(data)
1.25
>>> statistics.variance(data)
1.3720238095238095
SciPy ããã¸ã§ã¯ã <https://scipy.org> ã¯æ°å¤å¦çã®ããã®å¤ãã®ã¢ã¸ã¥ã¼ã«ãæä¾ãã¦ãã¾ãã
10.7. ã¤ã³ã¿ã¼ãããã¸ã®ã¢ã¯ã»ã¹Â¶
ã¤ã³ã¿ã¼ãããã«ã¢ã¯ã»ã¹ãããã¤ã³ã¿ã¼ããããããã³ã«ãå¦çãããããããã®å¤ãã®ã¢ã¸ã¥ã¼ã«ãããã¾ããæãåç´ãª2ã¤ã®ã¢ã¸ã¥ã¼ã«ã¯ã URL ãããã¼ã¿ãåå¾ããããã® urllib.request ã¨ãã¡ã¼ã«ãéãããã® smtplib ã§ã:
>>> from urllib.request import urlopen
>>> with urlopen('https://docs.python.org/3/') as response:
... for line in response:
... line = line.decode() # Convert bytes to a str
... if 'updated' in line:
... print(line.rstrip()) # Remove trailing newline
...
Last updated on Nov 11, 2025 (20:11 UTC).
>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()
(2ã¤ç®ã®ä¾ã¯ localhost ã§ã¡ã¼ã«ãµã¼ãã¼ãåãã¦ããå¿ è¦ããããã¨ã«æ³¨æãã¦ãã ããã)
10.8. æ¥ä»ã¨æå»Â¶
datetime ã¢ã¸ã¥ã¼ã«ã¯ãæ¥ä»ãæå»ãæä½ããããã®ã¯ã©ã¹ããåç´ãªæ¹æ³ã¨è¤éãªæ¹æ³ã®ä¸¡æ¹ã§æä¾ãã¦ãã¾ããæ¥ä»ãæå»ã«å¯¾ããç®è¡ããµãã¼ãããã¦ãã䏿¹ãå®è£
ã§ã¯åºåã®ãã©ã¼ããããæä½ã®ããã®å¹ççãªãã¼ã¿ã¡ã³ãæ½åºã«éç¹ãç½®ãã¦ãã¾ãããã®ã¢ã¸ã¥ã¼ã«ã§ã¯ãã¿ã¤ã ã¾ã¼ã³ã«å¯¾å¿ãããªãã¸ã§ã¯ãããµãã¼ããã¦ãã¾ãã
>>> # æ¥ä» (date) ã¯å®¹æã«ä½æã»ãã©ã¼ããããå¯è½
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
>>> # date ã§æ¥ä»ã®æ¼ç®ãå¯è½
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
10.9. ãã¼ã¿å§ç¸®Â¶
ä¸è¬çãªãã¼ã¿ã¢ã¼ã«ã¤ãã¨å§ç¸®å½¢å¼ã¯ã以ä¸ã®ãããªã¢ã¸ã¥ã¼ã«ã«ãã£ã¦ç´æ¥çã«ãµãã¼ãããã¾ã: zlib, gzip, bz2, lzma, zipfile, tarfileã
>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
10.10. ããã©ã¼ãã³ã¹ã®è¨æ¸¬Â¶
Python ã¦ã¼ã¶ã®ä¸ã«ã¯ãåãåé¡ãç°ãªã£ãã¢ããã¼ãã§è§£ããéã®ç¸å¯¾çãªããã©ã¼ãã³ã¹ã«ã¤ãã¦ç¥ãããã¨ããæ·±ãèå³ãæã£ã¦ãã人ããã¾ããPython ã¯ããããã£ãçåã«å³åº§ã«çããè¨æ¸¬ãã¼ã«ãæä¾ãã¦ãã¾ãã
ä¾ãã°ã弿°ã®å
¥ãæ¿ãæä½ã«å¯¾ãã¦ãä¼çµ±çãªã¢ããã¼ãã®ä»£ããã«ã¿ãã«ã®ããã¯ãã¢ã³ããã¯ã使ã£ã¦ã¿ããã¨æãããããã¾ããã timeit ã¢ã¸ã¥ã¼ã«ã使ãã°ãããã©ã¼ãã³ã¹ãã»ãã®å°ãè¯ããã¨ãããã«åããã¾ã:
>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791
timeit ã§ã¯å°ããç²åº¦ãæä¾ãã¦ããã®ã«å¯¾ãã profile ã pstats ã¢ã¸ã¥ã¼ã«ã§ã¯ãã大ããªã³ã¼ããããã¯ã«ããã¦å¾éã¨ãªãé¨åãå¤å®ããããã®ãã¼ã«ãæä¾ãã¦ãã¾ãã
10.11. å質管ç¶
é«ãå質ã®ã½ããã¦ã§ã¢ãéçºããããã®ä¸ã¤ã®ã¢ããã¼ãã¯ãå颿°ã«å¯¾ãã¦éçºã¨åæã«ãã¹ããæ¸ããéçºã®éç¨ã§é »ç¹ã«ãã¹ããèµ°ãããã¨ãããã®ã§ãã
doctest ã¢ã¸ã¥ã¼ã«ã§ã¯ãã¢ã¸ã¥ã¼ã«ãæ¤ç´¢ãã¦ããã°ã©ã ã® docstring ã«åãè¾¼ã¾ãããã¹ãã®è©ä¾¡ãè¡ãããã®ãã¼ã«ãæä¾ãã¦ãã¾ãããã¹ãã®ä½ãæ¹ã¯åç´ã§ãå
¸åçãªå¼ã³åºãä¾ã¨ãã®çµæã docstring ã«ã«ãã&ãã¼ã¹ãããã ãã§ãããã®ä½æ¥ã¯ãã¦ã¼ã¶ã«ä½¿ç¨ä¾ãä¸ããã¨ããæå³ã§ããã¥ã¡ã³ãã®æ
å ±ãå¢ããã¨åæã«ãããã¥ã¡ã³ãã«æ¸ããã¦ããã³ã¼ããæ£ããäºã確èªã§ããããã«ãªãã¾ã:
def average(values):
"""æ°å¤ã®ãªã¹ãã®ç®è¡å¹³åãè¨ç®ããã
>>> print(average([20, 30, 70]))
40.0
"""
return sum(values) / len(values)
import doctest
doctest.testmod() # docstring ã«åãè¾¼ã¾ãããã¹ããèªåçã«è©ä¾¡
unittest ã¢ã¸ã¥ã¼ã«ã¯ doctest ã¢ã¸ã¥ã¼ã«ã»ã©æ°æ¥½ã«ä½¿ãããã®ã§ã¯ããã¾ããããããç¶²ç¾
çãªãã¹ãã»ãããå¥ã®ãã¡ã¤ã«ã§ç®¡çãããã¨ãã§ãã¾ã:
import unittest
class TestStatisticalFunctions(unittest.TestCase):
def test_average(self):
self.assertEqual(average([20, 30, 70]), 40.0)
self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
with self.assertRaises(ZeroDivisionError):
average([])
with self.assertRaises(TypeError):
average(20, 30, 70)
unittest.main() # ã³ãã³ãã©ã¤ã³ãããããå¼ã³åºãã¨ãã¹ãããã¹ã¦å®è¡ããã
10.12. ããããªã¼å梱¶
Python ã«ã¯ "ããããªã¼å梱 (batteries included)" å²å¦ãããã¾ãããã®å²å¦ã¯ãæ´ç·´ãããå®å®ããæ©è½ãæã¤ Python ã®è¨å¤§ãªããã±ã¼ã¸ç¾¤ã«å¦å®ã«è¡¨ãã¦ãã¾ããä¾ãã°:
xmlrpc.clientããã³xmlrpc.serverã¢ã¸ã¥ã¼ã«ã¯ãé éæç¶ãå¼ã³åºã (remote procedure call) ãå ¨ã大ãããã¨ã®ãªã使¥ã«å¤ãã¦ãã¾ãã¾ããã¢ã¸ã¥ã¼ã«åã¨ã¯éããXML ãæ±ãããã®ç´æ¥çãªç¥èã¯å¿ è¦ããã¾ãããemailããã±ã¼ã¸ã¯ãMIME ããã®ä»ã® RFC 5322 ã«åºã¥ãã¡ãã»ã¼ã¸ææ¸ãå«ãé»åã¡ã¼ã«ã¡ãã»ã¼ã¸ã管çããããã®ã©ã¤ãã©ãªã§ããå®éã«ã¡ãã»ã¼ã¸ãéä¿¡ãããåä¿¡ãããããsmtplibãpoplibã¨éã£ã¦ãemail ããã±ã¼ã¸ã«ã¯ (æ·»ä»ææ¸ãå«ã) è¤éãªã¡ãã»ã¼ã¸æ§é ã®æ§ç¯ããã³ã¼ããè¡ã£ãããã¤ã³ã¿ã¼ãããæ¨æºã®ã¨ã³ã³ã¼ããããããããã³ã«ã®å®è£ ãè¡ã£ããããããã®å®å ¨ãªãã¼ã«ã»ãããåãã¦ãã¾ããjsonããã±ã¼ã¸ã¯ãã®ä¸è¬çãªãã¼ã¿äº¤æå½¢å¼ã®ãã¼ã¹ãããã¹ãã«ãµãã¼ããã¦ãã¾ããcsvã¢ã¸ã¥ã¼ã«ã¯ãã¼ã¿ãã¼ã¹ã表è¨ç®ã§ä¸è¬çã«ãµãã¼ãããã¦ãã CSV ãã¡ã¤ã«ãç´æ¥èªã¿æ¸ãããã®ããµãã¼ããã¦ãã¾ããxml.etree.ElementTreeãxml.domãªãã³ã«xml.saxããã±ã¼ã¸ã¯ XML ã®å¦çããµãã¼ããã¦ãã¾ããç·åããã¨ããããã®ã¢ã¸ã¥ã¼ã«ã«ãã£ã¦ Python ã¢ããªã±ã¼ã·ã§ã³ã¨ä»ã®ãã¼ã«ã®éã§ã¨ã¦ãç°¡åã«ãã¼ã¿ãåãæ¸¡ããã¨ãåºæ¥ã¾ããsqlite3ã¢ã¸ã¥ã¼ã«ã¯ SQLite ãã¼ã¿ãã¼ã¹ã©ã¤ãã©ãªã®ã©ããã¼ã§ããè¥å¹²éæ¨æºã® SQL ã·ã³ã¿ãã¯ã¹ãç¨ãã¦æ´æ°ãæ¥ç¶åºæ¥ãæ°¸ç¶çãªãã¼ã¿ãã¼ã¹ãæä¾ãã¾ããå½éåã«é¢ããæ©è½ã¯ã
gettext,locale,codecsããã±ã¼ã¸ã¨ãã£ãã¢ã¸ã¥ã¼ã«ç¾¤ã§ãµãã¼ãããã¦ãã¾ãã