функция Eval в Python - PullRequest
       17

функция Eval в Python

0 голосов
/ 10 декабря 2010

Здравствуйте, у меня есть следующий код:

путь = какой-то пункт назначения на вашем жестком диске

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 ]

2 голосов
/ 10 декабря 2010

Подсказка:

>>> float("\n1234\n")
1234.0
1 голос
/ 10 декабря 2010

Я не буду комментировать ваш код, просто опубликую пример, который вы можете проверить и изменить, чтобы он заработал. Эта функция читает содержимое текстового файла и, если возможно, преобразует токены, разделенные пробелами, в числа с плавающей запятой:

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 голос
/ 10 декабря 2010

ваш код довольно запутан ... чтобы прочитать файл, содержащий по одному float на строку, вы можете просто сделать:

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

val будет список, содержащий ваши данные с каждым элементом, являющимся плавающей точкой

0 голосов
/ 10 декабря 2010

Вот функция 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.

0 голосов
/ 10 декабря 2010

ast.literal_eval() превратит каждую строку в кортежи, которые затем можно будет перебрать или проиндексировать для значений.

...