Python 学習:tell、seek関数/バイナリファイル入力

2014-03-12 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
2、2、2、1、2、 0、0、0、0、1(38)で、換算ポイント 57pt 。
「グルコサミン」昨日朝、4位にup。
・-・ - -・

さて、本文。

前記事(2014-03-10):
Python 学習:system関数?
に続いて、Python の学習。ほぼ連載状態。

今回は、テキスト・データとバイナリ・データが混在したファイルの入力について。


1年半前(2012-07-04)に、
Perl でTIFF画像入出力」を書いた。
この時は、
  ・・・・・
  TIFF画像の入力は、
  (ImageMagick の)convert.exeで、TIFFをPGM形式に変換し、
  それを、読み込む。
   出力は、
  PGM形式で出力して、
  それを、
  (ImageMagick の)convert.exeで、TIFFに変換する。
  ・・・・・

と云うことで、

  ・・・・・
  「Perl」の場合、
  最初は、(PGM形式)をテキスト・ファイルとして3行目まで読み。
  「P5」の確認し、
  列数、行数を取得し、
  グレースケール値の255(又は65535)を確認する。

  この時点で、「tell」関数で、ファイル内位置を覚えておく。

  ファイルは一旦クローズし、
  次にバイナリ形式でオープンする。

  先に覚えておいた、ファイル位置に「seek」関数で位置づけ、
  残り全てを「read」関数で一気に読み込む。

  1バイトずつ「substr」関数で取り出し、
  「ord」関数で数値化する。

  これで、うまく行きました。
  ・・・・・

今でも、Perl では、この方法がメイン。

メインと云うのは、
昨年(2013-09-07)の記事:
Perl で、TIFFファイル出力
の如く、出力するだけの場合は、
自前の処理で行い、(ImageMagickの)“convert.exe”は使用していない。


で、
ここからが本題 ? ? ?


ホスト:Windows 7 x64 上の「Portable Python」(32bit版ですね)
で、Perl の時と同様のコーディングを行った。
即ち、

from subprocess import check_call
end_code = check_call( 'convert ・・・・・' )

IN = open( ・・・, 'rt' )
w = IN.readline() # スキップ ID == 'P5'
w = IN.readline() # 行数、列数
  ・・・・・
w = IN.readline() # スキップ GrayScale
fpt = IN.tell() # ファイル内位置を記憶!!!!!
IN.close()
# 一旦クローズして、バイナリモードでオープン
IN = open( ・・・, 'rb' )
IN.seek( fpt, os.SEEK_SET )

としたが、・・・

「fpt」の値が、・・・
どうも、改行文字を2バイトとしてカウントしている様ナ???

Windows 上で書き出した「CR+LF」なら良いが、
Linux で書き出した「LF」だけのテキスト・ファイルでは
行数分だけ先に進んだ状態になる!!!


だが、同じホストマシン上の
「ActivePython 2.7.5 for Windows(64-bit,x64)」
では正しい???


初めから 'rb' でオープンするか?
そうしても、「readline()」でテキストの1行分を読めるんだ。

でも、ActivePython では逆に「LF」の場合が不正な値。


これは厄介な問題ダ。


修行が足りない! もっと Python の学習を続けよう。



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140218,0304
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク