2016-11-20 65 views
0

我在这里问了一个问题how can I read each line of a xls file with pausing,答案是正确的如下如何在屏幕上打印两列xls文件?

这个解决方案是逐行的。例如,如果我在第一行有3个值。它打印第一个单元格然后第二个单元格然后第三个单元格等,直到第一行完成,然后到第二行。

我要的是在同一时间 打印所有细胞的距离,例如打印的第一行然后打印第二行等

举个例子,如果我在我的XLS文件两行,如下

行1:1 2 3(有在三个细胞三个值) 行2:5 6 7

我想它打印它像

value ::: 1 ------> 2------> 3 
value ::: 5-------> 6------> 7 





import time 
import pandas as pd 
import os 
import xlrd 
# at first I try to know how many rows and how many columns I have 
workbook = xlrd.open_workbook('myfile.xls') 
for sheet in workbook.sheets(): 
    for row in range(sheet.nrows): 
     for column in range(sheet.ncols): 
      os.system('clear') 
      print "value::: ", sheet.cell(row,column).value 
      time.sleep(5.5) # pause 5.5 seconds 

这说明只有一个XLS的列,但如果我有两个或三列 它忽略第二和第三等,并只打印第一个

我怎么能修改这能够打印多达小区我想在每个时代?

+0

您已经在您的脚本中导入了熊猫。你为什么不使用熊猫自己的功能将你的Excel表格变成熊猫框架并打印相关的列? – sobek

+0

@sobek我不知道该怎么做:-)你能给我一个解决方案吗?也描述它然后我会从中学习 –

回答

1

这对熊猫来说相对容易。

import time 
import pandas as pd 
import os 

frame = pd.read_excel('myfile.xls') 

这会给你一个熊猫DataFrame只有第一片是Excel文件。

大熊猫dataframes有一个内置的方法来遍历所有行:

for row in frame.iterrows(): 
    print row 
    time.sleep(5.5) 
    os.system('clear') 

另请参阅documentation of pandas.read_excel(这是大熊猫版本0.19.1)。

更新

好了,不能正常测试这已经围过来咬我的底部。看起来,遍历DataFrame的单行对格式化有意想不到的副作用。为确保不会发生这种情况,以下代码通过DataFrame类所具有的to_string方法将帧转换为字符串。我们不希望打印出行索引,因此我们将参数index设置为false

为了能够逐行迭代这个数据,我们需要在每一个换行符处分割字符串,这就是splitlines函数的作用。这是一个Python字符串的内置函数。它将包含整个数据框的单个字符串变成一个字符串列表,每个字符串只包含一行。

大熊猫将两列分开,所以最后我们用内建的replace函数替换每个出现的双空格与想要的分隔符。

import time 
import pandas as pd 
import os 

frame = pd.read_excel('data.xls') 

for row in frame.to_string(index=False).splitlines(): 
    os.system('clear') 
    print 'value ::: ' + row.replace(' ', '------>') 
    time.sleep(5.5) 

os.system('clear') 

作为参考,也可参见上built in types蟒手册,它列出了methods available for strings。自然,这些在尝试操纵字符串时非常有用。

更新2

这是开始下车的话题,但这里是一个颜色的版本,按您的评论。

import time 
import pandas as pd 
import os 

frame = pd.read_excel('data.xls') 

blue = '\033[94m' 
green = '\033[92m' 
yellow = '\033[93m' 
plain = '\033[0m'  
colormap = [blue, green, yellow]  
delimiter = '------>' 

for row in frame.to_string(index=False).splitlines(): 
    os.system('clear') 
    line = 'value ::: ' 
    for idx, column in enumerate(row.split(' ')): 
     if idx > 0: 
      line += delimiter 
     line += colormap[idx % 3] + column + plain 

    print line 
    time.sleep(5.5) 

os.system('clear') 
+0

这将一次打印所有行!我想每个时代的每一行都有单元格。例如第1页第1行,其距离如上所示。然后清除终端,然后打印第二个等等 –

+0

@LearnerAlgorithm那么我很抱歉,但你的问题不是特别清楚这一点......我会试着想出一些东西。顺便说一句。当你说打印第二个,第二个是什么?第二张? “距离”是什么意思?当你打印一个数据框时,它会打印一个距离的列,这是不够的吗? – sobek

+0

对不起!没有第二个手段排。我们不使用任何其他工作表。我们只留一张纸。唯一的问题是我们每次打印一行所有的单元格。例如第一行所有单元格(彼此之间有一定距离),然后清除终端,然后打印第二行所有单元格,然后清除终端,然后第三行所有单元格等等。每次给予每一行一定的暂停时间。请运行我上面发布的脚本,你可以看到我的意思 –