2016-11-20 1 views
0

나는 여기에서 질문을했다 how can I read each line of a xls file with pausing이고 대답은 다음과 같이 정확하다화면에 xls 파일의 두 열을 인쇄하는 방법은 무엇입니까?

이 해결책은 현명하다. 예를 들어 첫 번째 행에 3 개의 값이있는 경우 첫 번째 행이 끝날 때까지 첫 번째 셀을 인쇄 한 다음 두 번째 셀을 인쇄 한 다음 세 번째 셀을 인쇄 한 다음 두 번째 행을 인쇄합니다. 내가 원하는 무엇

내가 내 XLS 파일에있는 경우에, 예를 들어 두 번째 행 등

를 인쇄 할 첫 번째 행을 인쇄 예를 들어 동시에 에서 거리의 모든 세포를 인쇄하는 두 행으로 다음

행 1 : 1 2 3 (세 셀의 값이 세개) 행 2 : I는

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 
,617처럼 인쇄 할 5 6 7

이 XLS의 한 열을 표시하지만 두 개 또는 세 개의 열이있는 경우 는 등 두 번째와 세 번째를 무시하고 단지 나는이 많은 세포로 인쇄 할 수 있도록 개정 할 수있는 방법을 처음

를 인쇄 나는 각 신기원에서 원하니?

+0

이미 스크립트에서 팬더를 가져 왔습니다. 엑셀 시트를 판다 프레임으로 바꾸고 관련 칼럼을 인쇄하기 위해 판다 자신의 기능을 사용하지 않는 이유는 무엇입니까? – sobek

+0

@sobek 어떻게해야할지 모르겠다 :-) 나에게 해결책을 주시겠습니까? 또한 그것을 설명하면 그것을 –

답변

1

이것은 팬더와 상대적으로 쉽습니다.

import time 
import pandas as pd 
import os 

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

이는 엑셀 파일의 첫 번째 시트 당신에게 판다 DataFrame을 줄 것이다.

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

도 (이 팬더 버전 0.19.1입니다)를 documentation of pandas.read_excel를 참조하십시오 :

팬더 dataframes는 모든 행을 반복하는 붙박이 방법이있다.

업데이트 :

음, 제대로이 바닥에서 나를 물어 주위를왔다 테스트하지. DataFrame의 단일 행을 반복 할 경우 서식에 예기치 않은 부작용이있는 것으로 보입니다. 이 문제가 발생하지 않도록 다음 코드는 DataFrame 클래스 기능이있는 to_string 메서드를 통해 프레임을 문자열로 변환합니다. 우리는 로우 인덱스를 출력하기를 원치 않으므로 indexfalse으로 설정합니다.

이 데이터를 연속적으로 반복 할 수 있으려면 각 줄 바꿈에서 문자열을 분할해야합니다. 이것은 splitlines 함수의 기능입니다. 그것은 파이썬 문자열의 inbuilt 함수입니다. 전체 데이터 프레임을 포함하는 단일 문자열을 문자열 목록으로 변환합니다. 각 문자열은 한 줄만 포함합니다.

팬더는 열을 두 칸 씩 나누기 때문에 마지막으로 각 빈칸을 원하는 구분 기호로 교체합니다 (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') 

은 참고도가 methods available for strings 나열 built in types에 파이썬 설명서 참조.당연히이 문자열은 문자열을 조작 할 때 매우 유용합니다.

업데이트 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 글쎄요, 유감 스럽지만 질문에 대해서는 분명히 밝혀지지 않고 있습니다. 나는 무엇인가를 찾으려고 노력할 것입니다. Btw. 네가 두 번째 프린트 할 때, 두 번째 뭐라고 할까? 두 번째 시트? 그리고 '거리가있는'의미는 무엇입니까? 데이터 프레임을 인쇄 할 때 거리가있는 열을 인쇄합니다. 충분하지 않습니까? – sobek

+0

죄송합니다! 아니 두 번째 행을 의미합니다. 우리는 다른 시트를 사용하지 않습니다. 우리는 한 장만 가지고 머물러 있습니다. 유일한 것은 모든 셀을 한 번 한 번씩 각 행에 인쇄한다는 것입니다. 예를 들어 첫 번째 행의 모든 ​​셀 (서로 거리를두고 있음)을 누른 다음 터미널을 지우고 두 번째 행의 모든 ​​셀을 인쇄 한 다음 터미널을 지우고 세 번째 행을 모든 셀 등으로 지 웁니다. 각 행에 특정 일시 중지가 주어질 때마다 위에 게시 한 스크립트를 실행하십시오, 내가 무슨 뜻인지 알 수 있습니다. –

관련 문제