Python中的Eval函数

Python中的Eval函数,python,eval,Python,Eval,您好,我有以下代码: 路径=硬盘上的某个目标 def K(path): try: getfile = open(path + '/test.txt') line = getfile.readlines() print line getfile.close() except: line = getfile.readlines() eval(line) d = dict

您好,我有以下代码:

路径=硬盘上的某个目标

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()
函数来完成。我想将作为输入的字符串转换为可以使用的浮点

提前获取任何提示的Thanx

提示:

>>> float("\n1234\n")
1234.0
提示:


你的代码很混乱。。。要读取每行包含一个浮点数的文件,只需执行以下操作:

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

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

您的代码非常混乱。。。要读取每行包含一个浮点数的文件,只需执行以下操作:

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

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

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

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

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

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

ast.literal\u eval()
将每一行转换为元组,然后您可以对值进行迭代或索引。

ast.literal\u eval()
将每一行转换为元组,然后您可以对值进行迭代或索引。

下面是一个函数
read\u 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
然后,
读取编号('filename')
将返回:

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

您可能希望通过扩展内部列表理解并将对
float()
的调用包装在
try中来执行错误处理(或简单地忽略错误)。。。除了ValueError

之外,这里有一个函数
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
然后,
读取编号('filename')
将返回:

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

您可能希望通过扩展内部列表理解并将对
float()
的调用包装在
try中来执行错误处理(或简单地忽略错误)。。。除了ValueError

之外,如果您描述文本文件的格式,则会有所帮助。使用
eval
来避免
\n
是一件无法描述的事情。这段代码应该做什么?它在我的硬盘上获取一些file.txt文件,并将文本作为字符串导入python shell,因此如果即时文件有1,2(换行符)2,3(换行符)7,5,我在shell中得到的输入是['1,2\n','2,3\n','7,5']我希望它是我可以使用的数字:)希望这能帮助。。。让我们明确一点:文件中的每一行都有一个逗号分隔的整数列表,作为文本,您想将该文本转换为Python中的
int
对象列表吗?如果您描述文本文件的格式,这会有所帮助。使用
eval
来避免
\n
是一件无法描述的事情。这段代码应该做什么?它在我的硬盘上获取一些file.txt文件,并将文本作为字符串导入python shell,因此如果即时文件有1,2(换行符)2,3(换行符)7,5,我在shell中得到的输入是['1,2\n','2,3\n','7,5']我希望它是我可以使用的数字:)希望这能帮助。。。因此,让我们明确一点:文件中的每一行都有一个逗号分隔的整数列表,作为文本,您想将此文本转换为Python中的
int
对象列表吗?
val=[float(line)for line in open('test.txt')]
将更清晰、更节省内存(因为迭代文件中的行不会一次读取所有行,不像
readlines()
)。@benhoyt:你说得对……当我需要同时播放多行时,我经常使用
L=open(xxx)。readlines()
,而现在这很危险。val=[float(line)对于打开中的行('test.txt')]将更清晰、更高效(因为迭代文件中的行不会一次读取所有行,不像
readlines()
)。@benhoyt:你说得对……我经常使用
L=open(xxx).readlines()
当我需要同时演奏多个台词时,它现在危险地达到了手指的高度。