如何在屏幕上打印两列xls文件?

时间:2016-11-20 10:17:38

标签: python

我在这里问了一个问题how can I read each line of a xls file with pausing,答案是正确的,如下所示

此解决方案按行进行。例如,如果我在第一行有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,但是如果我有两列或三列 它会忽略第二个和第三个等,只打印第一个

如何修改它以便能够在每个时期打印尽可能多的单元格?

1 个答案:

答案 0 :(得分:1)

这对熊猫来说相对容易。

import time
import pandas as pd
import os

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

这将为您提供一只大熊猫DataFrame,其中只有该excel文件的第一张表。

pandas数据帧有一个内置的方法来迭代所有行:

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

请同时参考documentation of pandas.read_excel(这是关于pandas版本0.19.1)。

<强>更新

嗯,没有正确测试这种情况已经让我陷入了困境。似乎迭代DataFrame的单行会对格式化产生意外的副作用。为确保不会发生这种情况,以下代码通过to_string类功能的DataFrame方法将帧转换为字符串。我们也不希望打印出行索引,因此我们将参数index设置为false

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

pandas将列分隔两个空格,因此最后我们通过内置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上的python手册,它列出了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')