我有一些Python程序从文件中读取某些值。
文件示例:
0
4
5
6
解析每一行的代码如下:
s = f2.readline()
p = int(s)
我正在尝试在文件中传递sys.maxint
,如下所示:
0
sys.maxint
5
6
其中一种方法是将if (s=='sys.maxint')
视为代码中的特殊情况。
我想知道是否还有其他整洁的方法呢?
答案 0 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分: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
>>>