2011-10-24 61 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将永不增加,因此循环将永远不会退出。

相关问题