2012-12-12 3 views
1

입력 파일을 읽고 "ToolVersionEdit"이 포함 된 줄과 일치시키고 "="를 기준으로 분할하고 두 번째 부분을 얻으려고합니다. 아래를 사용하고 있습니다. output..where 내가 잘못 가고 원하는지고 있지 않다 입력 및 예상 OUPUT이 파일 한 줄씩 읽기

는 INPUT

아래에 주어진다 :

[BuildRequest] 
BuildRequestVersion=4.4.21 
BuildRequestType=Phone 
BuildCommandComboBox=common/build/build.sh tz:A8064AAAAANAAT140029.1 tz_bid=AAAAANAA wcnss:A8064AAAAANAAW120072.1 wcnss_bid=SCAQBAF lpass:A8064AAAAANAZL140106.1 boot_9x15:M9615ACETRMAAB12171.1 boot_9x15_bid=ACEHRMAA rpm:A8064AAAAANAAR1100153.1 rpm_bid=AAAAANAAR modem_9x15:M9615ACEFWTAAM4010223.1 modem_9x15_bid=ACEFWTAA apps_9x15:M9615AFEHRMAA2745.1 apps_9x15_bid=AFEHRMAA rpm_9x15:M9615ACETRMAAR1100159.4 rpm_9x15_bid=AAAAANAAR boot:A8064AAAAANAAB12171.1 boot_bid=AAAAANAA lpass_9x15:M9615ACETRMAZL140105.3 apps:A8064AAAAANLGA2214074.1 dsps:A8064AAAAANAAS150007.1 dsps_bid=DSPSBLD 
ToolVersionEdit=1.6.21 
CheckSumCheckBox=0 
PurposeEdit= 
[BuildRequestComments] 
LineCount=0 

이 예상 출력 : -1.6.21

import re 
import sys 
file = "C:\Dropbox\Reference.brf" 

lines = open(file ,'r').readlines() 

for line in lines: 
    if 'ToolVersionEdit' in line: 
     line = line.strip('=')[1] 

print line 
+1

readlines''에 대한 필요를 : 당신이 코드에 의해 모든 옵션을 얻을 수 원하는 경우

from ConfigParser import RawConfigParser as Parser filename = 'yourfile.conf' config = Parser() config.read(filename) print config.get('BuildRequest', 'ToolVersionEdit') 

. 지금 가지고있는 루프 구조를 사용하여 파일의 각 행을 반복 할 수 있습니다. – squiguy

답변

3

line 변수를 덮어 쓰는 것이 문제입니다. 루핑 변수와 동일한 변수를 캐시하려고합니다. 또한 원하는 것을 찾으면 루프를 계속 진행할 필요가 없습니다.

또 다른 변경 사항은 readlines으로 전화를 끊는 것입니다. 파일 객체에서 직접 모든 행을 반복 할 수 있습니다. 또한 변수를 사용하여 file 모듈을 (잠재적으로) 덮어 쓰는 것은 좋지 않은 형식이므로 그 이름도 변경했습니다.

import re 
import sys 
filename = "C:\Dropbox\Reference.brf" 
try: 
    input_file = open(filename ,'r') 
except IOError as exc: 
    print exc 
else: 
    cached_line = "" 
    for line in input_file: 
     if 'ToolVersionEdit' in line: 
      cached_line = line.split('=')[1] 
      break 

    print cached_line 
+0

@ breden- thanks..also .. 파일을 여는 동안 예외가 발생하는 경우 예외를 추가하는 방법은 무엇입니까? – user1795998

+1

예외 처리가 추가되었습니다. 나중에 참조 할 수 있도록 해당 함수에서 어떤 예외가 발생했는지 확인한 다음 http://docs.python.org/2/tutorial/errors.html을 사용하여 예외를 처리하십시오. –

1

당신이 원하는 split inst 사용 ead of strip

+0

@ Matt- 고마워 ... 파일 열기가 실패하는 경우를 대비하여 예외를 추가하는 방법은 무엇입니까? – user1795998

+0

Brendan의 답변을 참조하십시오. 그의 답변이 모든 것을 다 커버하는 것 같습니다. –

1

실제로 두 가지가 필요합니다.

  1. 변경 strip 당신이 그것을 분할 후 split
  2. break합니다.

결과 코드는

7 for line in lines: 
8  if 'ToolVersionEdit' in line: 
9   line = line.split('=')[1] 
10   break 
1

이 시도, 다음과 같습니다

import re 
    import sys 
    file = "/tmp/abc.txt" 

    lines = open(file ,'r').readlines() 

    for line in lines: 
     if 'ToolVersionEdit' in line: 
      desired_line = line.split('=')[1] 

인쇄 desired_line

2

사용 ConfigParser를. 파일 구성은 유닉스 설정 파일이고 ConfigParser (python3의 configparser)는 그것을 읽고 해석 할 수있다. http://docs.python.org/2/library/configparser.html.

for section in config.sections(): 
    for option, value in config.items(section): 
     print value 
관련 문제