2011-08-22 52 views
1

即时通讯尝试计算我保存在一个文件夹中的大约50个excel文件的x,y和z列的平均值和std。每个excel文件的第一列有x值,第二列有y,第三列有z。即时通讯使用这个脚本,但它一直给我错误。所有文件保存为“.xls”。请帮助,如果你们知道任何其他方式,我可以做到这一点,这将是非常有益的。这里是脚本和错误:python帮助计算excel文件的平均值和std

import xlrd 
    import numpy 
    import os 

    path = "E:\\hello\\Patient" 
    dirList=os.listdir(path) 
    f = open('E:\\hello\\try.xls', 'w') 
    f.write('Patient_ID, Xavg, xstd, yavg, ystd, zavg, ystd') 
    f.write("\n") 

    ##print dirList 
    ##i = 0 
    Col_values=[] 
    for file in dirList: 
     fullpath = os.path.join(path,file) 
    ## print fullpath 
     if os.path.isfile(fullpath) == 1: 
      wb = xlrd.open_workbook(fullpath) 
      sh = wb.sheet_by_index(0) 
      f.write(str(file)) 
      f.write(", ") 
      for i in range(0,3): 
       for j in range(sh.nrows): 
        Col_values.append(sh.cell(j,i).value) 
       a = numpy.average(Col_values) 
       b = numpy.std(Col_values) 
       f.write(str(a)) 
       f.write(", ") 
       f.write(str(b)) 
       f.write(", ") 
      f.write("\n") 

    f.close() 
+0

所有文件保存为“Microsoft Office Excel 97-2003工作表”。所以即时猜测这意味着文件被保存为“xls”文件。 –

+0

您可以通过尝试在文本编辑器中打开其中一个文件进行检查。如果这是一个Excel文件,你应该看到很多垃圾。这值得检查,因为如果您尝试使用xlrd打开文本文件,则会出现相同的错误。 –

+0

我检查了...我相信它是一个excel文件。 –

回答

0

一步一步来验证您能够从xls文件中读取某些内容。使用文件的硬编码绝对路径。 BTW,代码看起来不错(据我可以告诉)错误可能是在XLS文件...

喜欢的东西:

import xlrd 
wb = xlrd.open_workbook('myworkbook.xls') 

#Get the first sheet either by index or by name 

sh = wb.sheet_by_index(0) 
sh = wb.sheet_by_name(u'Sheet1') 

#Index individual cells: 

cell_A1 = sh.cell(0,0).value 
+0

在excel文件的一个上做到了这一点,并且我能够读取这些值。 –

+0

@ Temesgen-Abba好的,路径E:\\ hello \\ Patient'包含的东西不是.xls-文件吗?您在该文件夹中的* all *文件上编码循环... –

+0

文件夹中的所有文件都不是保存为xls的excel文件。 –

0

除了读取Excel文件,你的脚本试图写一个以及。这不会起作用。您需要使用xlwt包编写.xls文件。您现在写作的方法看起来更像CSV。如果所有所谓的Excel文件都是真正的CSV文件(尽管名称以.xls结尾),那么xlrd不会正确读取它们。

如果你真的想使用Excel文件,你应该同时使用xlrd(读取)和xlwt(写入)。如果您可以通过使用CSV文件获得,则根本不应该使用xlrd。您应该使用Python包含的csv模块(用于读取和写入.csv文件)。

+0

但我已经使用过这个脚本并且它工作了 –

+1

我向你保证,任何文件你使用脚本生成不是一个Excel文件,只是因为它可以用Excel打开并不会自动生成一个Excel文件,用这个脚本编写的文件是一个名为.xls的CSV文件。对于您的读取错误,您所指示的消息强烈建议xlrd遇到CSV文件而不是Excel文件。 –

+0

如何确保其可以使用xlrd读取的Excel文件? –