2013-01-21 79 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