2015-05-04 2 views
0

Я пытаюсь проанализировать данные из файла, который содержит два набора данных, включенных в него. Файл имеет информацию заголовка для первых 40 строк файла, а затем следует 1000 строк из двух столбцов данных. В файл с таким же форматом добавлен дополнительный файл. То есть строки с 1041 по 1081 имеют информацию заголовка второго файла, за которой следуют 1000 строк двух данных столбца. Первый столбец для обоих разделов данных одинаков. Поэтому я хочу проанализировать файл данных, чтобы удалить раздел заголовка и сохранить данные в массиве 3x1000.Анализ данных из файла и сохранение в массиве

Файл организован как:

Линия 1: // Заголовочной информации

Line 2: информация // Заголовочного

...

Line 40: 1.000e3 -4.000 е-3

линия 41: 1.001e3 -4.324e-3

...

Line 1000: 10.000e3 -78.678e-3

Line 1001: // Заголовочный информация

Line 1002: // Заголовочный Информация

Line 1041: 1.000e3 -16.000e-3

линия 41: 1.001e3 -14.324e-3

...

Line 2000: 10.000e3 -22.178e-3

Я хочу, чтобы разобрать на колонными данных и вывода на массив с форматом

[1.000e3, -4.000e-3, -16.000e- 3]

[1.001e3, -4.432e-3, -14.423e-3]

...

[10.00e3. -78.678e-3, -22.178e-3]

Я попробовал следующее: DATA = [[0 при х в xrange (3)] для х в xrange (10000)]

для I (os.listdir ('.')):

for lines in range(0, 39): 
     dataFile.readline() 

for lines in range(0, 10000): 
     readData = dataFile.readline() 
     dataLine = readData.split() 
     DATA[0].append(dataLine[0]) 
     DATA[1].append(dataLine[1]) 

for lines in range(0, 39): 
     dataFile.readline() 

for lines in range(0, 10000): 
     readData = dataFile.readline() 
     dataLine = readData.split() 
     DATA[2].append(dataLine[1]) 

dataFile.close() 

Благодарим за вашу помощь.

+0

Ваша первая проблема заключается в том, что 'диапазон (0, 39)' имеет только 39 значений, а не 40. И ' диапазон (0, 10000) ', очевидно, имеет 10000 строк, а не 1000. – abarnert

+0

Кроме того, не заполняйте списки нулями, а затем добавляйте их в конец; это даст вам 1000 0 плюс 1000 значений, а не только 1000 значений. – abarnert

+1

Кроме того, если есть только 2 конкатенированных файла, как вы собираетесь читать 3 набора строк и заголовков? – abarnert

ответ

2
from itertools import islice 
def get_headers_and_columns(fhandle): 
    return list(islice(fhandle,0,40)),zip(*map(str.split,islice(fhandle,0,1000))) 

with open("input.txt") as f_in,open("output.txt","w") as f_out: 
    headers, columns = get_headers_and_columns(f_in) 
    headers2, columns2 = get_headers_and_columns(f_in) 
    columns.append(columns2[-1]) 
    f_out.write("\n".join(map(" ".join,zip(*columns))) 

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

+1

Вы имели в виду 'fhandle', а не' f_in', во втором 'islice', правильно? (Он все равно должен работать, потому что единственным аргументом, который вы когда-либо получили, является глобальный 'f_in', но ...) – abarnert

+0

да ... копирование/вставка не удалось: P –

+1

Вы также изменили один из файлов в двоичном режиме и оставили другой - текст; Я только что отредактировал 'b'. – abarnert

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