×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

サイトトップまとめドキュメントPythonファイルの読み書き ≫ テキストファイルを読み込んで内容を端末に表示(シンプルな記述)

テキストファイルを読み込んで内容を端末に表示(シンプルな記述)

例81 テキストファイルの内容を端末に表示する例(シンプルな記述)

[任意]ファイル名: readtextfile2.py エンコーディング: UTF-8

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

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

import sys

# ファイルの場所を引数に取るようにする
# 必要な引数の数を満たさなければ使用法を表示して終了
if len (sys.argv) < 2:
  print ('使い方: {0} [入力ファイル]'.format (__file__))  # 「__file__」はこのスクリプトの場所
  sys.exit (0)
infile = sys.argv[1]

# ファイルを開くにはopen()関数を用いる
# 1番目の引数に開くファイルの場所,2番目の引数に操作モード(読み込みのみなら「r」という文字列)を指定
# encoding引数はファイルの内容を読み書きする際のエンコーディングで省略時の値は環境依存
# 戻り値(下の場合はf_in)はファイルオブジェクトという型で
# このファイルに対する操作時に使用する
try:
  # 「with open ([引数...]) as [ファイルオブジェクト]:」で
  # 次の行から字下げすると、字下げが解除されると自動的にファイルが閉じられ
  # close()を手動で呼ぶ必要がなくなる
  with open (infile, 'r', encoding='utf-8') as f_in:         # UTF-8
  #with open (infile, 'r', encoding='cp932') as f_in:        # CP932
  #with open (infile, 'r', encoding='iso-2022-jp') as f_in:  # ISO-2022-JP
    print ('テキストファイル読み込みのテスト #2')
    # 出力の区切り(横線)
    print ('-' * 80)
    try:
      # 「for [行の内容を保持する文字列オブジェクト] in [ファイルオブジェクト]:」で
      # 行ごとに読み込みを行った結果を取り出すことができる
      for line in f_in:
        print (line, end='')
    except IOError as e:
      print ('エラー: ファイル "{0}" からの読み込みに失敗しました: {1}'.format (infile, e), file=sys.stderr)
      sys.exit (1)
    # open()でファイルを開いたときにencoding引数が内容のエンコーディングと違う場合には
    # 読み込み文字列の中に処理できない文字を含むと読み込み時にUnicodeDecodeError例外が発生する
    except UnicodeDecodeError as e:
      print ('エラー: 文字エンコーディングの処理に失敗しました\n (エンコーディング:{0},位置:{1}-{2}): {3}'.format (e.encoding, e.start, e.end, e.reason), file=sys.stderr)
      sys.exit (1)
    finally:
      print ('-' * 80)
      print ('ファイル "{0}" は直後に閉じられます'.format (infile))
except IOError as e:
  print ('エラー: ファイル "{0}" を開けませんでした: {1}'.format (infile, e), file=sys.stderr)
  sys.exit (1)

# ここでwithの字下げが解除されてファイルは閉じられる

print ('終わり')

実行例:

(引数を付けずに実行)
$ [readtextfile2.pyの場所]
使い方: [readtextfile2.pyの場所] [入力ファイル]

(存在するファイルの場所を指定して実行)
$ [readtextfile2.pyの場所] [存在するファイルの場所]
テキストファイル読み込みのテスト #2
--------------------------------------------------------------------------------
(ファイルの内容が表示される)
--------------------------------------------------------------------------------
ファイル "[存在するファイルの場所]" は直後に閉じられます
終わり

(open()のencoding引数と異なるエンコーディングのファイルを指定して実行)
$ [readtextfile2.pyの場所] [存在するファイルの場所]
テキストファイル読み込みのテスト #2
--------------------------------------------------------------------------------
エラー: 文字エンコーディングの処理に失敗しました
 (エンコーディング:[エンコーディング名],位置:[開始位置]-[終了位置]): invalid start byte
--------------------------------------------------------------------------------
ファイル "[存在するファイルの場所]" は直後に閉じられます
終わり

(存在しない場所を指定して実行)
$ [readtextfile2.pyの場所] [存在しない場所]
エラー: ファイル "[存在しない場所]" を開けませんでした: [Errno 2] No such file or directory: '[存在しない場所]'

(アクセス権のない場所を指定して実行)
$ [readtextfile2.pyの場所] [アクセス権のない場所]
エラー: ファイル "[アクセス権のない場所]" を開けませんでした: [Errno 13] Permission denied: '[アクセス権のない場所]'

(ディレクトリの場所を指定して実行)
$ [readtextfile2.pyの場所] [ディレクトリ]
エラー: ファイル "[ディレクトリ]" を開けませんでした: [Errno 21] Is a directory: '[ディレクトリ]'