もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

退屈なことはPythonにやらせようを読んでpython勉強した(パート2 python基礎編続き)

こんにちは。

結構間があいちゃいましたが、ちゃんと諦めず読んどります。

今回は、正規表現やファイルの読み書き、ファイル操作あたりの基礎編でした。

普段自分が使用しているphpとほぼほぼ変わりない動きをするものだらけでしたので、パラパラと読み進めていきましたが、その中でも、勉強になったなー、おもしろいなーと思ったところを、記事として残しておこうとお思います。

勉強になったところ

os.path.join()

windwosでもmac/linuxでもディレクトリセパレータを気にせず書けるためのものです。

import os
path = os.path.join('', 'Users', 'kojirock', 'project')
print(path)

>>> Users/kojirock/project

頭に/をつけたい場合はどうせばよいのかなーと思って調べてたんですが、os.path.sep を使えば良いみたいです。

import os
path = os.path.sep + os.path.join('Users', 'kojirock', 'project')
print(path)

>>> /Users/kojirock/project

shelveモジュール

shelveは、データをバイナリファイルで保存したり、取り出したりできるものです。

# 保存
import shelve
shelf_file = shelve.open('data')
movie_title = ['アニマルプラネット', '海底鬼岩城']
shelf_file['movie_titles'] = movie_title
shelf_file.close()


# 呼び出し
shelf_file = shelve.open('data')
print(shelf_file['movie_titles'])

>>> ['アニマルプラネット', '海底鬼岩城']

↑の例だとカレントディレクトリにdata.dbというファイルでバイナリファイルが保存されます。

webサービスだと、RDB的なのに保存すると思うのですが、これはライブラリ的ものを作った時に使用するのかな?

shutil.rmtree()

引数に指定したパス以下のディレクトリ・ファイルを再帰的に削除します。

# ディレクトリとファイル作成
import os
os.mkdir('test')
for i in range(5):
    open('test/' + str(i + 1) + '.txt', 'w')
print(os.path.exists('test'))
print(os.listdir('test'))

>>> True
>>> ['5.txt', '4.txt', '3.txt', '2.txt', '1.txt']

# ファイル削除
import shutil
shutil.rmtree('test')
print(os.path.exists('test'))

>>> False

強制的に消すので rm -rf 的な感じですかね。

phpではrmtreeと同義の標準関数はないと思うので、exec('rm -rf /path/to') できな感じでやるしかないと思います。

怖いけど面白い機能でした。

raise

pythonで例外を起こす命令文です。phpのthrow的なノリだと思います。

name = 'ドラえもん'

if not name == 'のび太くん':
  raise Exception('のび太くんじゃないじゃない!')
  
>>> Exception: のび太くんじゃないじゃない!

終わりに

今回はパラパラーと読み進めてしまったのですが、正規表現・ファイルの読み書きあたりでこれはpython独自だぜ!っていうのがあればぜひ教えてください。

次回からは、応用 ではでは。