wiki:Python/Snippet/ファイル

ファイル

テキストファイルの読み込み

import string

fp = open('test.txt', 'r')
while True:
  data = fp.readline()
  if len(data) == 0:
    break
  print string.rstrip(data, '\n')
fp.close()

ファイルの全部の読み込み

import string

fp = open('test.txt', 'r')
data = fp.read()
print data
fp.close()
  • 大きなファイルサイズのもには使えない。

ファイルのコピー

import shutil

shutil.copyfile('test.dat', 'test1.dat')

ディレクトリのコピー

import shutil

shutil.copytree('testdir', 'testdir2')

一時ファイル

import tempfile

fname = tempfile.mktemp('.dat', dir='.')
fp = open(fname, 'w')
fp.write('test message')
fp.close()

CSVファイルの読み込み

import _csv

s = _csv.reader(file('test.txt', 'r'))
for ss in s:
  print ss
  • トークン解析をしなくて済む道具あることはすばらしい。
  • _csvにしないと動かないのはなぜ?

gzipファイルの展開

import tarfile

tf = tarfile.TarFile.gzopen('test.dat.tar.gz', mode = 'r')
print tf.getmembers()
for l in tf.getmembers():
  tf.extract(l)

簡単なデータベース

import dbm

db = dbm.open('test', 'rw')

if not db.has_key('key1'):
  db['key1'] = 'record1'
  print 'add record1'
else:
  print db['key1']
  • 複数プロセスでアクセスする場合はロックがいるのだろうか?

簡単なデータベース

import shelve

db = shelve.open('test.db')

if not db.has_key('key1'):
  db['key1'] = ('v1','v2','v3')
  print 'add new record'
else:
  print 'exists key1 record ', db['key1']
  • shelveを使うとpythonのタプル、リスト、辞書が格納できるのでとても便利。