2016-11-20 26 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

對不起!沒有第二個手段排。我們不使用任何其他工作表。我們只留一張紙。唯一的問題是我們每次打印一行所有的單元格。例如第一行所有單元格(彼此之間有一定距離),然後清除終端,然後打印第二行所有單元格,然後清除終端,然後第三行所有單元格等等。每次給予每一行一定的暫停時間。請運行我上面發佈的腳本,你可以看到我的意思 –