2014-02-04 4 views
0

Когда я запускаю программу, я получаю ValueError. Я не знаю, почему это так. Программа:Ошибка значения при сопоставлении таблиц

def get_coordinates(infile, delimiter): 
     new_list = [] 
     with open(infile, 'r') as f: 
      for line in f: 
       x, y = [float(i) for i in line.strip().split('delimiter')] 


     new_list.append('%0.4f,%0.4f' % (x, y)) 

return new_list 


LIST1 = get_coordinates('table1.txt', ',') 
LIST2 = get_coordinates('table2.txt', ',') 

NEW_LIST = list(set(LIST1) & set(LIST2)) 


with open('outfile.txt', 'w') as outfile: 
    for xy in NEW_LIST: 

     outfile.write('%s\n' % xy) 

я получаю следующее:

ValueError 

    202    else: 
    203     filename = fname 
--> 204    __builtin__.execfile(filename, *where) 


---> 18 LIST1 = get_coordinates('table1.txt', ',') 
    19 LIST2 = get_coordinates('table2.txt', ',') 
    20 


     7  with open(infile, 'r') as f: 
     8   for line in f: 
----> 9    x, y = [float(i) for i in line.strip().split('delimiter')] 

222.27515, 8.0208306eral for float(): 222.30777, 8.9363889 
+0

Отформатируйте его правильно, иначе это трудно понять. – bgusach

ответ

0

Вы видите это, потому что в вашей логике и/или коде есть ошибка для вытаскивания поплавков из строк из вашего файла. Это приводит к вызову float(), который выглядит примерно так:

>>> float('222.30777, 8.9363889') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): 222.30777, 8.9363889 

В настоящее время вы пытаетесь разделить каждую строку на строку 'delimiter', так, например 'FOOdelimiterBAR'.split('delimiter') приведет к ['FOO', 'BAR'].

Глядя на сообщение об ошибке, похоже, поплавки разделены запятой, так что если у вас есть переменная с именем delimiter, то вы должны использовать line.strip().split(delimiter), или просто использовать line.strip().split(','), если вы знаете, что вы хотите быть расщеплению на запятой.

+0

Я пробовал, как вы и предложили, но я все еще получаю сообщение об ошибке (222.37864r: неверный литерал для float(): 8.9363889). 222.37864 - это координата x в строке 2, 8.9363889 и y в строке 1 (из таблицы 1). Таблица 1 имеет 11 координат и приложение 2 таблицы. 600. – justme

0

Try без кавычек вокруг разделителем

x, y = [float(i) for i in line.strip().split(delimiter)]

Вы пытаетесь использовать строку 'разделитель' как splitting char, а не то, что содержит разделитель переменных.

Смежные вопросы