2014-09-11 2 views
0

나는 파일 이름을 인자로 취하는 작은 파이썬 프로그램을 가지고 있으며 주어진 .txt 파일에서 테이블을 찾으면 콘솔에서 테이블을 출력합니다. 그러나 테이블이 지저분한 것처럼 보입니다. 콘솔에 나타나는 출력 텍스트 형식을 제어하는 ​​방법은 무엇입니까? 다음과 같이콘솔 출력 형식화 및 정렬

#!/usr/bin/python 
import sys 
import os 

filename=sys.argv[1] 
filedir=os.getcwd() 

string= 'RADIANS' 
count=0 
N=11 
flag=0 

f = open(path,'r') 
if flag==0: 
    print ('Scanning for FATAL errors---NONE') 
    print('Scanning for SYSTEM FATAL errors---NONE') 
    print('----------------------------------------Structure EigenFrequncies--------------------------------------------\n') 
    newsearch = 'NUMBER OF ROOTS' 
    for line in f: 
     if newsearch in line: 
      print line 
      break 
    print('------------------------------------- REAL EIGEN VALUES(Displaying first 10 modes)-------------------------------\n') 
for line in f: 
    if flag==0: 
     if string in line: 
      print line 
      for i in range(N): 
       if exitstring1 not in line: 
        line = f.next().strip() 
        print line 
       else: 
        break 
      break 
f.close() 

텍스트 파일은 다음과 같습니다 :

      E I G E N V A L U E A N A L Y S I S S U M M A R Y (READ MODULE) 



            BLOCK SIZE USED ...................... 7 

            NUMBER OF DECOMPOSITIONS ............. 3 

            NUMBER OF ROOTS FOUND ................ 46 

            NUMBER OF SOLVES REQUIRED ............ 33 

1 EXTSE REDUCTION RUN              JULY 1, 2014 NX NASTRAN 5/ 1/14 PAGE 10 
     SE_10_KGH_09_5000HZ                           
0                                 

               R E A L E I G E N V A L U E S 
             (BEFORE AUGMENTATION OF RESIDUAL VECTORS) 
    MODE EXTRACTION  EIGENVALUE   RADIANS    CYCLES   GENERALIZED   GENERALIZED 
    NO.  ORDER                  MASS    STIFFNESS 
     1   1  1.858571E+08  1.363294E+04  2.169750E+03  1.000000E+00  1.858571E+08 
     2   2  2.912237E+08  1.706528E+04  2.716023E+03  1.000000E+00  2.912237E+08 
     3   3  4.555573E+08  2.134379E+04  3.396969E+03  1.000000E+00  4.555573E+08 
     4   4  4.794632E+08  2.189665E+04  3.484960E+03  1.000000E+00  4.794632E+08 
     5   5  4.850065E+08  2.202286E+04  3.505047E+03  1.000000E+00  4.850065E+08 
     6   6  4.879794E+08  2.209025E+04  3.515773E+03  1.000000E+00  4.879794E+08 
     7   7  4.898815E+08  2.213327E+04  3.522619E+03  1.000000E+00  4.898815E+08 
     8   8  4.968964E+08  2.229117E+04  3.547750E+03  1.000000E+00  4.968964E+08 
     9   9  5.004465E+08  2.237066E+04  3.560401E+03  1.000000E+00  5.004465E+08 
     10  10  5.088724E+08  2.255820E+04  3.590249E+03  1.000000E+00  5.088724E+08 

을하지만 난 내 코드를 실행하면 출력이 이런 식으로 나타납니다 :

MODE EXTRACTION  EIGENVALUE   RADIANS    CYCLES   GENERALIZED   GENERALIZED 

NO.  ORDER                  MASS    STIFFNESS 
1   1  2.292081E+04  1.513962E+02  2.409545E+01  1.000000E+00  2.292081E+04 
2   2  2.701519E+04  1.643630E+02  2.615918E+01  1.000000E+00  2.701519E+04 
3   3  5.071461E+04  2.251991E+02  3.584154E+01  1.000000E+00  5.071461E+04 
4   4  5.426810E+04  2.329551E+02  3.707596E+01  1.000000E+00  5.426810E+04 
5   5  1.084471E+05  3.293130E+02  5.241179E+01  1.000000E+00  1.084471E+05 
6   6  1.195545E+05  3.457666E+02  5.503046E+01  1.000000E+00  1.195545E+05 
7   7  1.254440E+05  3.541807E+02  5.636961E+01  1.000000E+00  1.254440E+05 
8   8  3.216040E+05  5.671014E+02  9.025700E+01  1.000000E+00  3.216040E+05 
9   9  3.434422E+05  5.860394E+02  9.327106E+01  1.000000E+00  3.434422E+05 
10  10  3.545295E+05  5.954238E+02  9.476464E+01  1.000000E+00  3.545295E+05 
다음과 같이

내 프로그램입니다

어떻게 정렬을 제어 할 수 있습니까? 아무도 이것으로 나를 도울 수 있습니까?

+1

python'tabulate' 모듈을 사용하십시오 – rjv

+0

나는 그 테이블 모듈을 설치할 루트 권한이 없습니다. 나는 회사에서 일합니다. 다른 방법이 있습니까? @rjv – ayaan

답변

0

출력을 입력 테이블과 동일하게 표시한다고 가정합니다.

문제는 첫 번째 제목 줄이 아니라 데이터 줄을 제거한다는 것입니다. 데이터 행의 경우 스트립 핑 (stripping)은 뒤 따르는 새 행 문자를 제거하고 print은 출력에 새 행을 추가합니다. 첫 번째 제목 라인을 위해, 당신은 그것을 제거 하지, 그래서 당신이 그것을 인쇄 할 때 당신이 새로운 라인 끝 (제목 행 사이에 빈 줄이 이유입니다.)

스트립은 또한 어떤을 제거 이는 또한 헤더와 데이터 라인의 정렬에 영향을 미친다.

rstrip()을 수정하면 줄의 에서 공백 (줄 바꿈 포함)이 제거됩니다. 이것은 코드에서 정의되지 않은으로 exitstring1에 대한 값을 추가

#!/usr/bin/python 
import sys 
import os 

filename=sys.argv[1] 
filedir=os.getcwd() 

exitstring1 = "something that won't be found" 
string= 'RADIANS' 
count=0 
N=11 
flag=0 

f = open(filename,'r') 
if flag==0: 
    print ('Scanning for FATAL errors---NONE') 
    print('Scanning for SYSTEM FATAL errors---NONE') 
    print('----------------------------------------Structure EigenFrequncies--------------------------------------------\n') 
    newsearch = 'NUMBER OF ROOTS' 
    for line in f: 
     if newsearch in line: 
      print line.rstrip() 
      break 
    print('------------------------------------- REAL EIGEN VALUES(Displaying first 10 modes)-------------------------------\n') 
for line in f: 
    if flag==0: 
     if string in line: 
      print line, 
      for i in range(N): 
       if exitstring1 not in line: 
        line = f.next().rstrip() 
        print line 
       else: 
        break 
      break 
f.close() 

참고.

대신 인쇄물 대신 스트립없이 sys.stdout.write(line)을 사용하는 것이 좋습니다.

+0

고맙습니다. @mhawke – ayaan