2011-10-24 104 views
0

我用Python 2.6.2在Linux上運行這個程序,它運行正常,返回的是十進制值,但是當我在Windows上的Python 2.7.2上運行它時,它不起作用,只是給了一段時間的空白空間,然後內存錯誤,但我不明白爲什麼......我需要它在Windows上運行其計算股票權益(ROE)的計劃。謝謝。此程序爲什麼在Linux Python Shell上運行,但不在Windows上運行?

運行該程序所需的CSV文件是here。 。

import csv 

csvname = raw_input("Enter csv name: ") 

sbuxfile = csv.reader(open(csvname), delimiter=',', quotechar='|') 

# List of Data 
row5, row8, row3, row7, avgequity, roe1, roe2 = ([] for i in range(7)) 

count = 0 
# Grab data and numerical values from CSV. 
for row in sbuxfile: 
    count += 1 
    if count == 8:  
    row8 = row 
    elif count == 5: 
    row5 = row 
    elif count == 3: 
    row3 = row 
    elif count == 7: 
    row7 = row 


a = 1 

# Perform calculations for average equity and ROE. 
while a < 8 : 
    if a == 1: 
    avgequity.append(round(float(row8[a]),2)) 
    roe1.append(float(row5[a])/float(row8[a])) 
    roe2.append((float(row5[a])/float(row3[a])) * (float(row3[a])/float(row7[a])) * (float(row7[a])/float(row8[a]))) 
    else:  
    avgequity.append(round(float((row8[a]),2) + float(row8[a-1]))/2) 
    roe1.append(float(row5[a])/float(row8[a])) 
    roe2.append((float(row5[a])/float(row3[a])) * (float(row3[a])/float(row7[a])) * (float(row7[a])/((float(row8[a]) + float(row8[a-1]))/2)))  
    a+=1 

print "\nAverage equity is " + str(avgequity) + "\n" 
print "ROE method 1 is " + str(roe1) + "\n" 
print "ROE method 2 is " + str(roe2) 
+0

你的輸入文件是什麼? – KevinDTimm

+1

如果將open(csvname)更改爲open(csvname,'rb')',會發生什麼? –

+0

我剛剛在上面添加了輸入文件,您可以下載並測試它。另外當你添加rb時,它仍然不能工作,只是同一個空白頁面,並在一段時間後內存錯誤。 – Goose

回答

0

我對腳本添加了一些修改。 它適用於Windows的Python 2.7。 下面的代碼:

import csv 

csvname = raw_input("Enter csv name: ") 

sbuxfile = csv.reader(open(csvname), delimiter=',', quotechar='|') 
# List of Data 
row5, row8, row3, row7, avgequity, roe1, roe2 = ([] for i in range(7)) 

count = 0 
# Grab data and numerical values from CSV. 
for row in sbuxfile: 
    count += 1 
    if count == 8:  
    row8 = row 
    elif count == 5: 
    row5 = row 
    elif count == 3: 
    row3 = row 
    elif count == 7: 
    row7 = row 


a = 1 

# Perform calculations for average equity and ROE. 
while a < 8 : 
    if a == 1: 
    avgequity.append(round(float(row8[a]),2)) 
    roe1.append(float(row5[a])/float(row8[a])) 
    roe2.append((float(row5[a])/float(row3[a])) * (float(row3[a])/float(row7[a])) * (float(row7[a])/float(row8[a]))) 
    a+=1 #added this line 
    else:  
    avgequity.append(round(float(row8[a]),2) + float(row8[a-1])/2) #rewrote this line as it had an error 
    roe1.append(float(row5[a])/float(row8[a])) 
    roe2.append((float(row5[a])/float(row3[a])) * (float(row3[a])/float(row7[a])) * (float(row7[a])/((float(row8[a]) + float(row8[a-1]))/2)))  
    a+=1 

print "\nAverage equity is " + str(avgequity) + "\n" 
print "ROE method 1 is " + str(roe1) + "\n" 
print "ROE method 2 is " + str(roe2) 

輸出爲: 平均公平是[2071.11,3505.7650000000003,3325.3650000000002,3273.6400000000003,3398.375,4187.76,5197.549999999999]

ROE方法1是[0.12812453225565035,0.15742791098732495,0.23651124740462906, 0.2532005689900426,0.2944854035689894,0.1283120464917753,0.2573271287452037]

ROE方法2是[0.12812453225565038,0.17126298080734237,0.21680660107401206,0.2613058810726202,0.29811440335236883,0.1466466034500227,0.281411820724956 9]

+0

Ahh我明白了,所以現在a + = 1循環退出,另一行中的錯誤只是我看到的括號內的錯誤,謝謝! – Goose

0

它有助於知道它在哪裏爆炸。如果錯誤信息不足,您應該嘗試使用Python調試模塊。當執行Python時「python ./script.py」,請嘗試「python -m pdb ./script.py」並逐步瞭解它到底有多遠。 (輸入help獲取更多信息)如果在內存錯誤之前沒有得到任何反饋。

csv文件需要多長時間? (我們假設你在兩個平臺上使用相同的數據)有2個循環可能很重要。循環訪問sbuxfile時(例如「for for sbuxfile:」),您沒有停止,但第二個循環(例如「while while < 8:」)只處理7行。通常情況下,如果重複數據或大數據迭代並保留,則會出現內存錯誤。如果csv是巨型的,而您只想讀取前7行,則可以跳出csv讀取循環。

另外,我不知道在你的csv讀取循環中行值的等同目的是否完成。如果你想將csv字段填入數組值,你應該這樣做。例如row8 = row

我不打擾問,平臺之間的RAM內存大小是否不同。

1

您已將您的a+=1行的縮進填滿,可能是因爲(錯誤地)使用了源文件中的選項卡。如此處所示,a將永不增加,因此循環將永遠不會退出。

相關問題