0

一部のコードを fortran90 から python 2.7 に変換していますが、fortran コードの Open、Write、および Read 関数の引数を理解するのに苦労しています。パイソン。

ここに、私が理解して Python に変換したい Fortran コードのブロックをいくつか示します。

OPEN(1,FILE=TRIM(filenameOut),RECL=2000)
WRITE(1,*) "tAge/yr  (u-r)  (u-z)  fGas  Mstars/MstarsOld"
CLOSE(1)

「1」はファイル名にラベルを割り当てているだけだと思います.TRIMは、pythonに相当する変数の前後の空白を削除しています filenameOut.strip() または何か。RECL が何をしているのか、このブロックで他の関数に相当する python がどうなるかはわかりません。

もう一つの例:

OPEN(1,FILE=TRIM(filenameOut),RECL=2000)
WRITE(1,*) "(u-r)  prob(u-r)"
DO countInside=1,nColourBins
    WRITE(1,*) uMinusrMidpointsArray(countInside),probuMinusrArray(countInside)
CLOSE(1)

このことから、アスタリスクはファイルの次の行に書き込むことを意味していると推測できます。繰り返しますが、Pythonでこれを行う方法はまだわかりません。

fortran コードの読み取り例:

OPEN(1,FILE=TRIM(filenameBC),RECL=2000)
  READ(1,*)
  READ(1,*)
  READ(1,*)
  READ(1,*)
  READ(1,*)
  READ(1,*)
  READ(1,*)

  IOEnd=0
  DO WHILE(IOEnd>-1)
     READ(1,*,IOSTAT=IOEnd) logTime,Mbol,g,uMg,gMr,gMi,gMz
  END DO
  CLOSE(1)

READ(1,*) の繰り返しが単にファイルの最初の 7 行を読み取っていることは理解していますが、これに相当する Python のショートカット、つまり 8 行目などから開始する方法がわかりません。

4

3 に答える 3

1

最初の例は明らかに間違って括弧で囲まれています。2番目のようになるはずです。

Trim は末尾のスペースのみをクリアします。ここではおそらく必要ありません。

あなたの場合、ファイルは順次アクセスに接続されます。この場合、RECL はファイルの最大レコード長を設定します (これは行の長さを意味します)。無視できる可能性は十分にあります。

I/O ステートメントの 2 番目の位置にあるアスタリスクは、list-directed formatの使用を意味します。これにより、コンパイラは、出力を正確にフォーマットする方法をいくらか自由にできます。特に、出力が長すぎる場合、または現在の項目のすべての項目が入力に含まれていない場合、コンパイラは次の行 (レコード) に進みます。

ということで、7アイテムなら1行から読めREAD(1,*,IOSTAT=IOEnd) logTime,Mbol,g,uMg,gMr,gMi,gMz ますが、1アイテムで7行から赤くすることもできます。この柔軟性を維持したい場合は、Python コードでこれを考慮する必要があります。

WRITE(1,*) uMinusrMidpointsArray(countInside),probuMinusrArray(countInside)長い文字列でない限り、項目は 2 つしかないため、1 行にのみ書き込む必要があります。

于 2013-03-31T11:02:32.263 に答える
-1

システムからimport argv

脚本、

filename = argv

txt = open(filename)

print "Here's your file %r:" % filename
print txt.read()

print "Type the filename again:"
file_again = raw_input("> ")

txt_again = open(file_again)

print txt_again.read()
于 2013-07-22T07:42:18.700 に答える