0

ファイルから特定の値を読み取る Python プログラムがあります。

ファイルの例:

0
4
5
6

各行を解析するコードは次のとおりです。

    s = f2.readline()
    p = int(s)

sys.maxint次のように、代わりにファイルを渡そうとしています。

0
sys.maxint
5
6

if (s=='sys.maxint')これを行う方法の 1 つは、コード内の特別なケースとしてチェックすることです。

そうするための別のきちんとした方法があるのだろうか?

4

3 に答える 3

6

ルックアップ値の辞書を使用します。

import sys

constants = {"sys.maxint" : sys.maxint, "meaning_of_life": 42}

with open("input.txt", "r") as f:
    for line in f2:
        s = line.rstrip("\n")
        try:
            p = int(s)
        except ValueError, ve:
            p = constants.get(s)
            if p is None:
                raise ve
于 2013-01-21T08:04:21.963 に答える
1

なぜif「きちんと」していないのかわかりません。私の意見では、それは明らかな解決策です。なしで本当にやりたい場合はif、これを行うことができます(不要な文字列表現を使用して):

#! /usr/bin/python2.7
import sys

for s in (s.strip () for s in open ('test', 'r') ):
    p = int (s.replace ('sys.maxint', str (sys.maxint) ) )
    print (p)

私は個人的に保持しifます:

for s in (s.strip () for s in open ('test', 'r') ):
    p = sys.maxint if s == 'sys.maxint' else int (s)
    print (p)
于 2013-01-21T08:35:04.033 に答える
0

eval 関数を使用できます。目的には役立ちますが、注意して使用する必要があります。

    Python 2.7.1+ (r271:86832, Sep 27 2012, 21:16:52) 
    [GCC 4.5.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a = eval('0')
    >>> import sys
    >>> a = eval('sys.maxint')
    >>> a
    2147483647
    >>> 
于 2013-01-21T08:04:26.827 に答える