0

SL6 で実行される Fortran プログラムによって作成されたテキスト ファイルがあります。次のようになります。

1

R - Z     binning n.   1  "1         " , generalized particle n.  223      
  R coordinate: from  0.0000E+00 to  1.1000E+02 cm,   110 bins ( 1.0000E+00 cm wide)
  Z coordinate: from -2.9000E+02 to  2.9000E+02 cm,   290 bins ( 2.0000E+00 cm wide)
  axis coordinates: X = 0.0000E+00, Y =  0.0000E+00 cm
  Data follow in a matrix A(ir,iz), format (1(5x,1p,10(1x,e11.4)))

 accurate deposition along the tracks requested
  this is a track-length binning
   3.0406E-01  2.3565E-02  1.0664E-02  7.2081E-03  5.2534E-03  4.8756E-03  4.5011E-03  4.2792E-03  4.1801E-03  3.9648E-03
   3.9108E-03  3.8301E-03  3.7256E-03  3.6330E-03  3.5912E-03  3.5461E-03  3.4579E-03  3.4813E-03  3.4395E-03  3.3868E-03
   And so on for 6000 lines...

すべての数字をリストのリストに読み込みたいので、最初の 9 行をスキップする必要がありますが、Python は「rU」として開いているにもかかわらず、末尾の行を認識しません。テストとして、このコード:

f = open(file, 'rU')
print f.readlines(2)

出力 ('\n は文字列の一部として読み取られます):

BlBlockq['1\n', ' R - Z ビニング n. 1 "1 " 、一般化された粒子 n。223\n', ' R 座標: 0.0000E+00 から 1.1000E+02 cm、110 個のビン (幅 1.0000E+00 cm)\n', ' Z 座標: -2.9000E+02 から 2.9000E+02 までcm, 290 ビン (幅 2.0000E+00 cm)\n', ' 軸座標: X = 0.0000E+00, Y = 0.0000E+00 cm\n', ' データは行列 A(ir,iz) に続きます, format (1(5x,1p,10(1x,e11.4)))\n', '\n', ' 要求されたトラックに沿った正確な配置\n', ' これはトラック長ビニングです\n' , ' 3.0406E-01 2.3565E-02 1.0664E-02 7.2081E-03 5.2534E-03 4.8756E-03 4.5011E-03 4.2792E-03 4.1801E-03 3.9648E-03 \n', ' 3.9108E 03 3.8301E-03 3.7256E-03 3.6330E-03 3.5912E-03 3.5461E-03 3.4579E-03 3.

これに関するご支援をいただければ幸いです。

4

3 に答える 3

1

これは期待どおりに動作しています。ドキュメントから:

readlines: readline() を使用して EOF まで読み取り、読み取った行を含むリストを返します。オプションの sizehint 引数が存在する場合、EOF まで読み取る代わりに、合計で約 sizehint バイトの行全体が読み取られます (おそらく、内部バッファー サイズに切り上げた後)。ファイルのようなインターフェイスを実装するオブジェクトは、実装できない場合、または効率的に実装できない場合、sizehint を無視することを選択できます。

readline: ファイルから 1 行全体を読み取ります。末尾の改行文字は文字列に保持されます (ただし、ファイルが不完全な行で終わっている場合は存在しない場合があります)。

末尾の行が必要ない場合は、strip各行でそれを取り除きます。

冒頭の行をスキップしたい場合は、いくつかの方法があります。個人的に私はitertools.isliceに部分的です:

for line in itertools.islice(infile, 9, None):
    print line
于 2013-07-26T15:51:39.113 に答える
0

readlines改行が削除されることを指定しているかどうかはわかりませんが、区切り記号として使用されているだけです。

ただし、これは簡単に修正できます。

lines = [line.strip() for line in file.readlines()]
于 2013-07-26T15:59:53.190 に答える