1

久しぶりにpythonを試してみました。

次の行を含むファイルがあります。

My_NUMBER                 =  24

この番号を抽出したい (ここでは 24 を想定していますが、これは My_NUMBER に基づいて抽出したいものです。私の python コードでは、次の行を読み取ることができます

with open(filename) as f: lines = f.read().splitlines()

for line in lines:
    if line.startswith(' My_NUMBER                 ='):
        line=(line.rsplit(' ', 1)[0])
        num= line.rsplit('=',1)[1].split("=")[0]
        num = num.strip(" ")
        print num

ただし、これは数値ではなく空白の出力を印刷します。ここで明らかに間違ったことをしている場合、誰かがコメントできますか?

4

7 に答える 7

3

これは正規表現の完璧な仕事です:

import re
text = open(filename).read()
print re.search("^\s*My_NUMBER\s*=\s*(\d*)\s*$", text, re.MULTILINE).group(1)
于 2012-10-31T12:45:54.673 に答える
2

私はこのようなもので行きます

with open(filename) as f:
    for line in f:
        line = line.replace(' ', '')
        if line.startswith('My_NUMBER'):
            number = line.partition('=')[2]
            print number
于 2012-10-31T12:46:16.733 に答える
0

正規表現を使用した方が良いかもしれません

import re

txt='My_NUMBER                 =  24'

re1='.*?'   # Non-greedy match on filler
re2='(\\d+)'    # Integer Number 1

rg = re.compile(re1+re2,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
    int1=m.group(1)
    print "("+int1+")"+"\n"

ここから: http://txt2re.com/index-python.php3?s=My_NUMBER%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20 %20%20=%20%2024&4

于 2012-10-31T12:44:39.033 に答える
0

このようなことを試してください:

In [49]: with open("data1.txt") as f:
   ....:     for line in f:
   ....:         if line.strip():           #if line is not an empty line
   ....:             if "My_NUMBER" in line:
   ....:                 num=line.split("=")[-1] # split line at "=" and 
                                                 # return the last element
   ....:                 print num
   ....:                 
   ....:                 
  24
于 2012-10-31T12:44:51.243 に答える
0
for line in lines:
    if line.startswith(' My_NUMBER                 ='):
        num = line.split('=')[-1].strip()
        print num
于 2012-10-31T12:46:00.110 に答える
0
import re

exp = re.compile(r'My_NUMBER *= *(\d*)')
with open('infile.txt','r') as f:
    for line in f:
        a = exp.match(line)
        if a:
            print a.groups()[0]

テストされていませんが、動作するはずです

于 2012-10-31T12:46:47.030 に答える
0

最もきちんとした方法は、各行をループし、 に基づいて分割し=、 の前の値=MY_NUMBER

関数はこれstr.partitionに適しています (分割に似ていますが、常に 3 つのチャンクを返します)。またstr.strip、空白を気にする必要がないことを意味します

with open(filename) as f:
    lines = f.readlines()

for line in lines:
    key, eq, value = line.partition("=")
    if key.strip() == "MY_NUMBER":
        num = value.strip()
        print num
于 2012-10-31T12:55:18.877 に答える