2017-04-13 61 views
1

这里有一个Python的问题:处理Excel数据使用Pyexcel

你好,我正在做一个web应用程序,它从把它们变成从一个整数电子表格(.csv)接收数据。评估这些值,返回这些值并将该数据写入表格的第4列,每行。正如你可以看到我的代码:

import fileinput 
import csv 
import pyexcel as pe 
records = pe.iget_records(file_name="test.xlxs") 






cho = raw_input("\nStart Forecaster on file?:<1/0>") 

if cho == 1: 

    for record in records: 
    rem = record[i,0] 
    sold1 = record[i,1] 
    sold2 = record[i,2] 

    rem = int(rem) 
    sold1 = int(sold1) 
    sold2 = int(sold2) 
    result = forecast(rem,sold1,sold2) 
    record[i,4] = result 
    print "Forecast Complete! Please check the file!" 


else: 
    quit() 




def calculate(rem,sold1,sold2): 

    result = ((l+t)/2)*3 
    return result 





def forecast(rem,sold1,sold2): 

    if (rmn == 0 and sold1 == 0 and sold2 ==0): #All ZERO 
      return 15 
    elif (rmn == 0 and sold1 == 0 and sold2 < 10): #ALL FOR ONE PRODUCT VALUE 
      return sold2*3 
    elif (rmn == 0 and sold1 < 10 and sold2 ==0): 
      return sold1*3 
    elif (rmn < 10 and sold1 == 0 and sold2 == 0): 
      return rmn*3 
    #END FOR ONE PRODUCT VALUE 
    elif (rmn>= 10 and sold1>=10 and sold2>=10): 

      if((rmn/3)>=(sold1+10) or (rmn/3)>=(sold1+10)): 
       return 0 
      else: 
       return calculate(rmn,sold1,sold2)-rmn 
    elif (rmn<10 and sold1<10 and sold2<10): 
      return calculate(rmn,sold1,sold2) 
    elif (rmn == 0 and sold1>=10 and sold2>=10): 
      return calculate(rmn,sold1,sold2) 
    else: 
      return sold1 

...有没有错误,但它没有对csv文件有任何影响。有任何想法吗?也在print "Forecast Complete! Please check the file!" ..当我运行程序时,它不会到达那里,这意味着循环必须有错误吗?我正在搞清楚。但我也想要求帮助。

原始文件:

1 2 3 
1 2 3 
1 2 3 

我想做的发生:

1 2 3 result(digits) 
1 2 3 result(digits) 
1 2 3 result(digits) 
+0

我没有特别使用这个库,但它看起来并不像你在任何地方向这个文件写入任何东西。 'records = pe.iget_records(file_name =“test.xlxs”)'只是将文件内容拖入Python,在那里操纵它,然后丢弃结果。在编写/保存更改时,请查看[教程](https://pyexcel.readthedocs.io/en/latest/tutorial_file.html#update-an-existing-column-to-an-existing-file)。 – roganjosh

+0

我试过'records.save_as(“test.xlsx”)'但它仍然不起作用,你怎么看我的循环?它有什么问题吗? – dekt

+0

我现在没有时间玩图书馆,也没有测试数据。但是,在保存之前,您应该用数据的“打印”来验证您实际计算了您认为有的事情。 – roganjosh

回答

1

简短的回答

pyexcel.iget_records返回字典的列表,并适用于数据一个标题行。 'records.save_as'将不起作用,因为返回的数据结构是一个标准的Python列表,当然它不具有save_as功能。

pyexcel.Sheet实例将具有save_as函数,但应在代码中使用'pyexcel.get_sheet'。或pyexcel.save_as,模块级功能可以将数组保存到文件中。请参阅the example here

样品溶液

>>> import pyexcel as p 
>>> sheet = p.get_sheet(file_name='test.xlsx') # pip install pyexcel-xlsx 
>>> sheet 
Sheet 1: 
+---+---+---+ 
| 1 | 2 | 3 | 
+---+---+---+ 
| 1 | 2 | 3 | 
+---+---+---+ 
| 1 | 2 | 3 | 
+---+---+---+ 
>>> for row in sheet: 
...  print row 
... 
[1, 2, 3] 
[1, 2, 3] 
[1, 2, 3] 
>>> results = [] 
>>> for row in sheet: 
...  results.append(sum(row)) # <- do your own forcast here 
... 
>>> results 
[6, 6, 6] 
>>> sheet.column += results 
>>> sheet 
Sheet 1: 
+---+---+---+---+ 
| 1 | 2 | 3 | 6 | 
+---+---+---+---+ 
| 1 | 2 | 3 | 6 | 
+---+---+---+---+ 
| 1 | 2 | 3 | 6 | 
+---+---+---+---+ 
>>> sheet.save_as('new.csv') 

龙答案

pyexcel可以帮助你在一个班轮获得Python数据结构。有4 functions:get_array,get_dict,get_records和get_book_dict。提供了Two streaming functions来处理更大的数据大小:iget_array和iget_records。假定开发人员只需要数据进行分析。

pyexcel提供two custom functions帮助您处理数据:get_sheet和get_book。前者返回pyexcel.Sheet,后者返回pyexcel.Book。假设开发人员需要操作行,列和表格,然后将表格/书籍保存回Excel文件。

这样说,然而,通用的Python数据结构可以很容易地存储为一个Excel文件。这里是模块级别的three save functions:save_as和save_book_as。以下是how to save an array into an xls file的示例。

与大熊猫相比,pyexcel是一款重量轻,易于安装,易于理解和基于组件的Excel数据处理软件包。然而,它并不是要取代大熊猫,而是为数据分析任务提供一种替代方案,即不太复杂

与openpyxl和xlsxwriter,pyexcel让您专注的不是文件格式的数据,在那里你可以重用你的代码来处理ODS,XLS和CSV文件格式无需更改代码比较。

+0

chfw的另一个传奇答案:) – ropata