2013-01-21 116 views
0

我有一些Python程序從文件讀取某些值。從文件中讀取sys.maxint

文件例如:

0 
4 
5 
6 

解析每一行的代碼如下:

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

我試圖在文件中傳遞sys.maxint代替如下:

0 
sys.maxint 
5 
6 

其中一種方法是檢查if (s=='sys.maxint')作爲代碼中的特殊情況。

不知有沒有另外的整潔的這樣做?

+2

*您可以*使用'EVAL ()',但我個人不會。 – NPE

+0

@NPE爲什麼不呢? – Betamoo

+2

@NPE:是的,你說的對,特別是「但我本人不會」 –

回答

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) 
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 
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 
    >>> 
+1

「謹慎」?即在調用之前解析其輸入? – eumiro

+0

原則上你可以用這種形式評估任何python代碼 – djinn