2010-12-10 79 views
0

你好我有以下代码:eval函数在Python

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()函数完成。我想字符串,我得到的输入转换,以花车,我可以..

感谢名单适用于任何提示提前

+1

如果你描述你的文本文件的格式,这将有所帮助。使用'eval'来避免'\ n'是无法描述的。 – khachik 2010-12-10 09:43:08

+0

这段代码应该做什么? – 2010-12-10 09:43:36

+0

它在我的硬盘上需要一些file.txt文件,并将文本作为字符串导入到python shell,所以如果立即文件有1,2(newline)2,3(newline)7,5,我在shell中获得的输入是['1,2 \ n','2,3 \ n','7,5'],我希望它能成为我可以使用的数字:)希望能够帮助 – user457142 2010-12-10 09:47:53

回答

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

你的代码是相当混乱......读取包含每行一个浮子上的文件,你可以简单地做:

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

val将包含您的数据。每一个元素是一个浮动

01名单
+0

'val = [float(line)for open in line('test.txt')]'会更清晰和更具有内存效率(因为迭代文件中的行不会一次读取所有行,不像'readlines方法()')。 – 2010-12-10 14:41:26

+0

@benhoyt:你是对的......当我需要同时播放多条线时,我经常最终使用'L = open(xxx).readlines()',这是危险地到达手指级别的东西现在。 – 6502 2010-12-10 15:26:25

0

ast.literal_eval()会变成每一行成元组,然后可以遍历或索引值。

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