1

入力ファイルを読み取り、「ToolVersionEdit」を含む行と一致させてから、「=」に基づいて分割し、2番目の部分を取得しようとしています。以下を使用しています。目的の出力が得られません。どこにありますか。入力と予想される出力を以下に示します。

入力:

[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
4

5 に答える 5

3

問題は、line変数を上書きしていることです。キャッシュしようとしているものと同じ変数をループ変数として使用しています。また、探しているものが見つかったら、ループを続行する必要はありません。

私が行ったもう1つの変更は、への呼び出しを削除することでした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
于 2012-12-13T00:00:22.857 に答える
2

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
于 2012-12-13T00:41:31.260 に答える
1

split代わりに使用したいstrip

于 2012-12-13T00:00:12.537 に答える
1

実際には2つ必要です。

  1. stripに変更split
  2. breakあなたがそれを分割した後。

結果のコードは次のようになります。

 7  for line in lines:
 8      if 'ToolVersionEdit' in line:
 9          line = line.split('=')[1]
10          break
于 2012-12-13T00:03:49.137 に答える
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]

希望の行を印刷

于 2012-12-13T00:04:04.420 に答える