2012-12-12 219 views
1

我正在嘗試讀取輸入文件並匹配包含「ToolVersionEdit」的行,然後根據「=」進行拆分並獲取第二部分..我正在使用下面的..我沒有得到期望的output..where我要去錯誤的輸入和輸出中預計下面給出逐行讀取文件

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-謝謝..還有..如何在文件打開失敗的情況下添加異常? – user1795998

+1

增加了異常處理。爲了將來的參考,找出有問題的函數拋出了什麼異常,然後使用http://docs.python.org/2/tutorial/errors.html來處理它。 –

1

你想使用split inst ead of strip

+0

@ Matt-謝謝......如何在文件打開失敗的情況下添加異常? – user1795998

+0

查看Brendan的答案,看起來像他的答案涵蓋了所有內容 –

1

實際上你需要兩件事情。

  1. 變化stripsplit
  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。你的文件的構造是unix配置文件和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