2013-02-21 2 views
0

У меня возникла проблема с построением кода, который я использовал ранее. У меня есть входной файл, содержащий 6 частей данных в строке. Проблема заключается в том, что в качестве разделителя не всегда есть пробелы, чтобы разделить каждую строку вверх, и я также хочу разбить строку на неровных шагах с 4/4/4/8/8/4 символами, т.е. так:Неровная символьная строка split

' 0 0 -16-50.6123 115.393 2' 

будет разделен на (0,0, -16, -50,6123,115,393,2). Затем я использую эти данные для создания словаря, где ключ представляет собой массив из первых трех чисел [0,0, -16], а возвращаемое значение представляет собой массив из последних трех чисел [-50.6123,115.393,2].

Код, который я использовал ранее, когда мои данные всегда были разделены пробелом (который я не могу изменить, поскольку он исходит из другого места), был следующим. Есть ли хороший способ изменить код, который у меня уже есть, чтобы разместить новое неравномерное разбиение строк.

Спасибо!

def formatter(lines): 
    for line in lines: 
     if not line.strip(): continue 
     yield [to_float(item) for item in line.split()] 

dct1 = {} 
with open('test.txt') as f1: 
    for row in formatter(f1): 
     dct1[tuple(row[:3])] = row[3:6] 
+0

найти разделитель или использовать ломтики – dmg

ответ

0

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

my_string =' 0 0 -16-50.6123 115.393 2' 
widths=[4,4,4,8,8,4] 
my_start=0 
my_end=0 
for w in widths: 
    my_end+=w 
    print my_string[my_start:my_end] #or do whatever you want 
    my_start+=w 

выход:

0 
    0 
-16 
-50.6123 
115.393 
    2 
Смежные вопросы