2015-10-01 5 views
1

Мне нужно рассчитать длину строк, которые определяются координатами в текстовом файле.Получение координат из текстового файла в python

В координатах текстового файла записывается следующим образом:

1; (5,2); (3,3); (3,2); (1,0) 

2; (4,5); (5,7); (6,8); (8,9) 

3; (1,1); (1,2); (1,3) 

4; (2,1); (3,2); 

и еще несколько строк.

Я не уверен, как это сделать. Я начал с попытки разделить идентификатор (первый номер) и разбить круглые скобки. Снятие идентификатора действительно сработало, но .strip для круглых скобок ничего не делает.

with open('polyline.txt','r') as f: 
data = f.readlines() 
for line in data: 
data=line.strip("()") 
data=line[3:] 
print data 
+0

попробуйте использовать regex –

ответ

0
import re, math 

def distance_formula(p1, p2): 
    return math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2) 

lines = [] 
with open('file.txt', 'rb') as f: 
    for row in f.read().splitlines(): 
     row = [int(x) for x in re.findall(r'(\d+)', row)] 
     lines.append(sorted([(row[i + 1], row[i + 2]) for i in range(0, len(row[1:]), 2)])) 

for i, line in enumerate(lines): 
    distance = 0 
    for c, coordinate in enumerate(line): 
     distance = distance + distance_formula(coordinate, line[c + 1]) 
     if c + 1 >= len(line) - 1: 
      break 
    print 'Line {0} has a length of {1} units'.format(i + 1, distance) 
+0

как бы я вычислил длину строки, потому что я все еще потерял к несчастью:/ – valsten

+0

Подсчитайте, что именно? Расстояние между двумя самыми дальними точками? –

+0

рассчитать длину линии от координаты точки 1 до координаты точки 2, затем от координаты 2 до координаты 3, а затем от координаты 3 до координаты 4 (если есть 4), суммируя длину трех линий. – valsten

2
>>> from math import pow, sqrt 

>>> def distance(c1, c2): 
...  return sqrt(pow(c2[0] - c1[0], 2) + pow(c2[1] - c1[1], 2)) 

>>> distance((3, 1), (3, 2)) 
1.0 

-

>>> import re 

>>> with open('polyline.txt','r') as f: 
...  for line in f: 
...   coordinates = re.findall(r'\((\d+),(\d+)\)', line) 
...   coordinates = map(lambda c: map(int, c), coordinates) 
...   print coordinates 
...   for i, coordinate in enumerate(coordinates[:-1]): 
...    print distance(coordinate, coordinates[i + 1]), 
...   print 

[[5, 2], [3, 3], [3, 2], [1, 0]] 
2.2360679775 1.0 2.82842712475 

[[4, 5], [5, 7], [6, 8], [8, 9]] 
2.2360679775 1.41421356237 2.2360679775 

[[1, 1], [1, 2], [1, 3]] 
1.0 1.0 

[[2, 1], [3, 2]] 
1.41421356237 

Обратите внимание, что это дает вам расстояние между соседними координатами в каждом списке.

+0

Как бы я вычислил длину строк, если вы можете мне помочь с этим? :/ – valsten

+0

@valsten Какова ваша версия на Python? – ozgur

+0

моя версия - 2,7 – valsten

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