試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ファイルを連結して標準出力に出力するPythonスクリプト

catというコマンドは、引数に渡されたファイル(複数可)を渡された順に結合して標準出力に書き出す。実際には色々なオプションで挙動が変えられるのだが、今回はPythonの練習の1つとして、結合する機能を持った関数と、これを利用してcatコマンドの基本的な動作を行うためのスクリプトを作成した。処理としてはあまり難しいことはしていない。
(2015/1/6)ドキュメントのリンク先を修正し、サンプルコードもPython 3で動作することなどを目的に書き直した。

#! /usr/bin/python
# -*- coding: utf-8 -*-

# 引数に指定されたファイルを連結して標準出力に出力

from __future__ import print_function

import locale
import sys
import os

locale.setlocale (locale.LC_ALL, '')
bufsize = 512
fd_out = sys.stdout.fileno ()
infiles = sys.argv[1:]

for infile in infiles:
  try:
    with open (infile, 'rb') as f_in:
      # データを少しずつ読み込んでそのまま出力ファイルへ書き込む
      while True:
        try:
          data = f_in.read (bufsize)
        except IOError as e:
          sys.exit ('Could not read from file "{0}" [1]: {2}'.format (infile, e.errno, e.strerror))
        if not data:
          break
        os.write (fd_out, data)
  except IOError as e:
    sys.exit ('Could not open file "{0}" [1]: {2}'.format (infile, e.errno, e.strerror))

実際に実行してみると、出力されるファイルは、同じようにしてcatコマンドで結合したのと同じものになった。
(2008/6/22)引数の処理を修正

参考URL: