Python中的Eval函数

时间:2010-12-10 09:40:14

标签: python eval

您好,我有以下代码:

path =硬盘上的某个目的地

def K(path):
    try:

        getfile = open(path + '/test.txt')
        line = getfile.readlines()
        print line
        getfile.close()

    except:
        line = getfile.readlines()
        eval(line)
        d = dict()
        val= d[k]

导入文本文件,现在我的问题是避免\n,我假设可以使用eval()函数完成。我想将我得到的字符串作为输入转换为我可以使用的浮点数..

提前任意提示

5 个答案:

答案 0 :(得分:2)

提示:

>>> float("\n1234\n")
1234.0

答案 1 :(得分:1)

您的代码非常混乱...要读取每行包含一个浮点数的文件,您可以这样做:

val = map(float, open("test.txt"))

val将是一个包含您的数据的列表,每个元素都是一个浮点数

答案 2 :(得分:1)

我不会评论您的代码,只是发布一个示例,您可以检查和修改它以使其正常工作。此函数读取文本文件的内容,并尽可能将由空格分隔的标记转换为浮点数:

def getFloats(filepath):
  fd = open(filepath) # open the file
  try:
    content = fd.read().split() # read fully
    def flo(value):  # a function that returns a float for the given str or None
      try: return float(value)
      except ValueError: return None # skip invalid values
    # iterate through content and make items float or None,
    # iterate over the result to choose floats only
    return [x for x in [flo(y) for y in content] if x]
  finally:
    fd.close()

答案 3 :(得分:0)

ast.literal_eval()会将每一行转换为元组,然后您可以迭代或索引值。

答案 4 :(得分:0)

这是一个函数read_numbers(),它返回一个浮动列表列表。

def read_numbers(filename):
    numbers = []
    with open(filename) as f:
        for line in f:
            lst = [float(word) for word in line.split(',')]
            numbers.append(lst)
    return numbers

如果您的文件包含:

1, 2
2, 3
7, 5

然后read_numbers('filename')会返回:

[[1.0, 2.0], [2.0, 3.0], [7.0, 5.0]]

您可能希望通过扩展内部列表理解并将调用包裹在float()中的try ... except ValueError来进行错误处理(或者只是忽略错误)。