ファイルの読み書き †
- fileexam.py
import codecs
# 文字コード関係ない時は
# fr = open('sample1.txt', 'rb')
# fw = open('sample2.txt', 'wb')
fr = codecs.open('sample1.txt', 'r', 'utf8', 'ignore')
fw = codecs.open('sample2.txt', 'w', 'ms932', 'ignore')
# 一気に全部読み込む
contents = fr.read()
print("-----File.read()-----")
print(contents)
# 先頭まで巻き戻し
fr.seek(0)
# 一行づつ読み込む
print("-----File.readlines()-----")
for line in fr.readlines() :
# line には、改行文字が入ってくることに注意
print(line.replace('\r\n','↓'))
fw.write(line.replace('\r\n','とかいってみるテスト\r\n'))
fw.close()
fr.close()
- 実行結果
open() / codecs.open() †
- open('ファイル名','モード')
r | テキスト読み込み |
rb | バイナリ読み込み |
w | テキスト書き込み |
wb | バイナリ書き込み |
a | テキスト上書き |
ab | バイナリ上書き |
- codecs.open('ファイル名','モード','文字コード','エラー処理')
- テキストファイルを使うなら、codecs.open() が定石
- BOM付きUTF-8 = 'utf_8_sig'
ファイル操作は With を使え! †
import codecs
with codecs.open('sample1.txt', 'r', 'utf8', 'ignore') as fr :
with codecs.open('sample2.txt', 'w', 'ms932', 'ignore') as fw :
for line in fr.readlines() :
fw.write(line.replace('\r\n','とかいってみるテスト\r\n'))
めっちゃすっきりしたコードになる。With 節を抜けるときにファイルを閉じてくれる (エラー時にも閉じてくれる)
With を使わないと・・・
ディレクトリとファイルの操作 †
os.path.join(tmp, tmp.txt) | tmp/tmp.txt | OS依存のパスセパレータで連結(\/) |
os.path.dirname('tmp/tmp.txt') | tmp | |
os.path.basename('tmp/tmp.txt') | tmp.txt | |
os.path.abspath('tmp/tmp.txt') | '/Users/atsushi/tmp/tmp.txt' | カレントディレクトリと連結 |
os.path.split('tmp/tmp.txt') | ('tmp', 'tmp.txt') | |
os.path.exists('tmp/tmp.txt') | True | 存在チェック |
os.remove('tmp/tmp.txt') | | ファイル削除(dir削除は OSError) |
os.mkdir('tmp/sub1/sub2') | | ディレクトリを作成(途中のディレクトリが無かったら OSError) |
os.makedirs('tmp/sub1/sub2') | | 再帰的にディレクトリを作成 |
os.rmdir('tmp') | | ディレクトリを削除(中身があったら OSError) |
os.remvedirs('tmp') | | ディレクトリを再帰的に削除(ファイルがあったら OSError) |
os.listdir('tmp') | ['sub1','tmp.txt'] | ディレクトリ配下のファイルのリスト |
shutil.rmtree('tmp') | | ディレクトリを再帰的に削除(ファイルも消す) |
shutil.rename(pre,post) | | リネーム(別パスへの移動にも使える) |
shutil.copyfile(from,to) | | ファイルコピー |
shutil.copy(from,to) | | ファイルコピー、toがディレクトリなら直下に同名でコピー |
shutil.copy2(from,to) | | shutil.copy() + 属性情報もコピー |
ファイル情報 †
>>> import os
>>> m = os.stat('pdfocrx.log')
>>> m
posix.stat_result(
st_mode=33188,
st_ino=4444284,
st_dev=16777218,
st_nlink=1,
st_uid=501, st_gid=20,
st_size=1358,
st_atime=1350489644,
st_mtime=1348017627,
st_ctime=1348017627)
>>> import time
>>> time.ctime(m.st_ctime)
'Wed Sep 19 10:20:27 2012'
[~]$ ls -la pdfocrx.log
-rw-r--r-- 1 atsushi staff 1358 9 19 10:20 pdfocrx.log
Python