[英]How to read and write parquet files using python version 2.7 or less
[英]How to Open, Read, and Write files in Python 2.7 — Converting code from fortran 90 to Python
我正在將一些代碼從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行開始的方式。
正如上次你提到的那樣,recl =用於順序訪問不是標准的,至少對一個編譯器沒有任何作用,幾乎可以肯定應該被忽略。
在python中,您將行讀為字符串並處理字符串,如下所示:
file=open(filename,'r')
for i in range(6):file.readline() #skipping 6 lines
items=file.readline().split()
items將您的值保存為字符串..然后根據類型轉換每個:
logTime=float(item[0])
我只是在沒有測試的情況下飛過它。但它應該讓你開始。
如果需要的話,一個問題,帶有“*”的fortran將從多行讀取。 我懷疑這是這種情況,但為了完整你需要做這樣的事情,
items=[]
while len(items)<nrequired:items.extend(file.readline().split())
寫作你可以嘗試:
file=open(filename,'r')
file.write(' '.join([repr(x) for x in (v1,v2,v3)])+'\n')
要么
file.write(('%.14g'+(' %.14g'*2)+'\n')%(v1,v2,v3))
(need to count how many values you have to put the "*2" )
這些都不能為您提供從fortran獲得的確切輸出。 如果你需要相同的間距,小數位等,請參閱Vladimirs注釋..(如果python中的值為0.1,則沒有一種簡單的方法可以強制打印尾隨的零點0.100000,就像你使用fortran一樣)
你的第一個例子顯然是錯誤的括號。 它應該像第二個一樣。
修剪僅清除尾隨空格 。 這可能不需要。
在您的情況下,該文件將連接到順序訪問。 在這種情況下,RECL設置文件的最大記錄長度(這意味着行長度)。 很有可能你可以忽略它。
I / O語句第二個位置的星號表示使用列表定向格式 。 這使編譯器可以自由地格式化輸出。 特別是,如果輸出太長,或者輸入不包含當前輸出中的所有te項,則編譯器繼續在下一行(記錄)上繼續。
因此, READ(1,*,IOSTAT=IOEnd) logTime,Mbol,g,uMg,gMr,gMi,gMz
可以從1行讀取,如果它包含7個項目,但它也可以從7行中帶有一個項目的紅色。 如果你想保持這種靈活性,你必須在Python代碼中使用它。
WRITE(1,*) uMinusrMidpointsArray(countInside),probuMinusrArray(countInside)
應該只寫一行,因為它只有兩個項,除非它們是長字符串。
來自sys 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.