2013-11-20 1 views
0

У меня есть список с тремя столбцами: ID, долгота, широта:как сгруппировать текстовый файл с помощью первых 3 символов строк?


Часть моего текстового файла:

AFJ.SPZ.IR.8 46.84 38.463 
AKL.SPZ.IR.11 46.691 38.399 
AKL.SPZ.IR.12 46.722 38.407 
AFJ.SPZ.IR.3 46.812 38.433 
AFJ.SPZ.IR.8 46.84 38.463 
AKL.SPZ.IR.11 46.691 38.399 
AKL.SPZ.IR.12 46.722 38.407 
AKL.SPZ.IR.13 46.654 38.404 
AKL.SPZ.IR.25 46.699 38.442 
AKL.SPZ.IR.3 46.812 38.433 
AKL.SPZ.IR.8 46.84 38.463 
ALA.SPZ.IR.3 46.812 38.433 
ANAR.BHZ.IR.8 46.84 38.463 
ANJ.SPZ.IR.13 46.654 38.404 
ANJ.SPZ.IR.18 46.662 38.399 
ANJ.SPZ.IR.3 46.812 38.433 
BST.SPZ.IR.1 46.732 38.457 
BST.SPZ.IR.10 46.707 38.448 
BST.SPZ.IR.11 46.691 38.399 
BST.SPZ.IR.12 46.722 38.407 

Я хочу, чтобы выполнить функцию долготу и широта НМД которые имеют одинаковые первые 3 символа. мой код:

from itertools import groupby 

with open('coors1.txt') as fin: 
    lines = (line.split() for line in fin) 
    for l in lines: 
     a=l[0].split(".") 
     for key, items in groupby(l,a): 
      print (items) 

    TypeError: 'str' object is not callable 

почему не GroupBy понимает ул?

ответ

0
  1. Вам необходимо отсортировать данные перед применением groupby
  2. Вам необходимо указать ключ, как функции, а не строка

    from itertools import groupby 
    with open('Input.txt') as fin: 
        lines = sorted([line.rstrip() for line in fin]) 
    for item, grp in groupby(lines, key = lambda x:x.split(".")[0]): 
        print item, list(grp) 
    

Выход

AFJ ['AFJ.SPZ.IR.3 46.812 38.433', 'AFJ.SPZ.IR.8 46.84 38.463', 'AFJ.SPZ.IR.8 46.84 38.463'] 
AKL ['AKL.SPZ.IR.11 46.691 38.399', 'AKL.SPZ.IR.11 46.691 38.399', 'AKL.SPZ.IR.12 46.722 38.407', 'AKL.SPZ.IR.12 46.722 38.407', 'AKL.SPZ.IR.13 46.654 38.404', 'AKL.SPZ.IR.25 46.699 38.442', 'AKL.SPZ.IR.3 46.812 38.433', 'AKL.SPZ.IR.8 46.84 38.463'] 
ALA ['ALA.SPZ.IR.3 46.812 38.433'] 
ANAR ['ANAR.BHZ.IR.8 46.84 38.463'] 
ANJ ['ANJ.SPZ.IR.13 46.654 38.404', 'ANJ.SPZ.IR.18 46.662 38.399', 'ANJ.SPZ.IR.3 46.812 38.433'] 
BST ['BST.SPZ.IR.1 46.732 38.457', 'BST.SPZ.IR.10 46.707 38.448', 'BST.SPZ.IR.11 46.691 38.399', 'BST.SPZ.IR.12 46.722 38.407'] 
+0

Вы не используете 'item getter' в любом месте: P –

+0

@kroolik Спасибо за указание :) Я удалил это сейчас – thefourtheye

+0

@thefourtheye Спасибо большое за вашу помощь. Но я не нашел способ выполнить свою функцию для каждой двух точек (координат) в группе. – sahar