簡體   English   中英

逐行讀取文件

[英]Reading a file line-by-line

我正在嘗試讀取輸入文件,並匹配包含“ ToolVersionEdit”的行,然后根據“ =”進行拆分,並獲得第二部分。.我正在使用以下..出問題了?輸入和預期輸出如下

輸入:

[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

您的問題是您要覆蓋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

使用ConfigParser。 您的文件的構造是unix配置文件,並且ConfigParser(在python3中為configparser)可以讀取並解析http://docs.python.org/2/library/configparser.html

from ConfigParser import RawConfigParser as Parser

filename = 'yourfile.conf'

config = Parser()
config.read(filename)
print config.get('BuildRequest', 'ToolVersionEdit')

如果您願意,可以通過以下代碼獲取所有選項:

for section in config.sections():
    for option, value in config.items(section):
        print value

您要使用split而不是strip

您實際上需要兩件事。

  1. 更改stripsplit
  2. breakbreak

結果代碼看起來像這樣,

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

嘗試這個:

    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]

打印所需的行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM