2016-11-17 6 views
0

У меня есть CSV-файл, который экспортирован из внешнего приложения, как напримерЧтение CSV, а группировка строк

15/07/2008 2:48:53 PM 

Measurement device:; dvp3445 
Field detector:; Diode 
Reference detector:; Undefined 
Scan mode:; Continuous 

Points [mm]: 
X; Y; Depth; Normalized field; Current field; Ratio 
0.0; -109.0; 20.0; 1.3; 0; 0.0 
0.0; -108.7; 20.0; 1.3; 0; 0.0 
0.0; -108.4; 20.0; 1.3; 0; 0.0 
0.0; -108.0; 20.0; 1.3; 0; 0.0 
0.0; -107.7; 20.0; 1.3; 0; 0.0 


15/07/2008 5:28:50 PM 

Measurement device:; dvp3445 
Field detector:; Diode 
Reference detector:; Undefined 
Scan mode:; Continuous 

Points [mm]: 
X; Y; Depth; Normalized field; Current field; Ratio 
0.0; -108.7; 40.0; 1.3; 0; 0.0 
0.0; -108.4; 40.0; 1.4; 0; 0.0 
0.0; -108.1; 40.0; 1.4; 0; 0.0 
0.0; -107.8; 40.0; 1.4; 0; 0.0 
0.0; -107.5; 40.0; 1.5; 0; 0.0 
0.0; -107.2; 40.0; 1.6; 0; 0.0 
0.0; -106.9; 40.0; 1.6; 0; 0.0 


15/07/2008 5:28:50 PM 

Measurement device:; dvp3445 
Field detector:; Diode 
Reference detector:; Undefined 
Scan mode:; Continuous 

Points [mm]: 
X; Y; Depth; Normalized field; Current field; Ratio 
0.0; -106.6; 40.0; 1.7; 0; 0.0 
0.0; -106.3; 40.0; 1.8; 0; 0.0 
0.0; -106.0; 40.0; 1.8; 0; 0.0 
0.0; -105.7; 40.0; 1.9; 0; 0.0 
0.0; -105.4; 40.0; 2.0; 0; 0.0 
0.0; -105.1; 40.0; 2.1; 0; 0.0 
0.0; -104.8; 40.0; 2.2; 0; 0.0 
0.0; -104.5; 40.0; 2.3; 0; 0.0 

ли кто-нибудь из читателей питон Csv обрабатывать такого рода ситуации, учитывая, что я вывожу ищу, 3 массива с каждым столбцом, соответствующим заголовкам точек X; Y; Глубина; Нормализованное поле; Текущее поле; Соотношение.

Я попытался реализовать это с помощью регулярного анализа регулярных выражений, но это не сработало. Может ли кто-то поделиться некоторыми идеями?

GT

+0

попробуйте с моим решением – eyllanesc

ответ

0

Поскольку классы чтения в csv модулы инициализируется строковыми итерируемыми, это будет достаточно, чтобы кусок из соответствующих блоков строк:

import csv 

f = open('data.txt', 'r') 
lines = [l for l in f if len(l.split(';')) == 6] # filter relevant lines 
bounds = [i for i, line in enumerate(lines) if line[0] == 'X'] + [len(lines)] 
bounds = zip(bounds, bounds[1:]) # [(0, 6), (6, 14), (14, 23)] 
line_blocks = [lines[start: end] for start, end in bounds] 

csv_readers = [csv.DictReader(block, delimiter=';', skipinitialspace=True) for block in line_blocks] 

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

r = csv_readers[0] 
for record in r: 
    print record 

{'Ratio': '0.0', 'Depth': '20.0', 'Normalized field': '1.3', 'Current field': '0', 'Y': '-109.0', 'X': '0.0'} 
{'Ratio': '0.0', 'Depth': '20.0', 'Normalized field': '1.3', 'Current field': '0', 'Y': '-108.7', 'X': '0.0'} 
{'Ratio': '0.0', 'Depth': '20.0', 'Normalized field': '1.3', 'Current field': '0', 'Y': '-108.4', 'X': '0.0'} 
{'Ratio': '0.0', 'Depth': '20.0', 'Normalized field': '1.3', 'Current field': '0', 'Y': '-108.0', 'X': '0.0'} 
{'Ratio': '0.0', 'Depth': '20.0', 'Normalized field': '1.3', 'Current field': '0', 'Y': '-107.7', 'X': '0.0'} 
+0

Спасибо @schwobaseggl: но мой ожидаемый результат был 0,0; -106,6; 40,0; '1.7; 0; 0,0 0,0; -106,3; 40,0; 1,8; 0; 0,0 0,0; -106,0; 40,0; 1,8; 0; 0,0 0,0; -105,7; 40,0; 1,9; 0; 0,0 0,0; -105,4; 40,0; 2,0; 0; 0,0 0,0; -105,1; 40,0; 2,1; 0; 0,0 0,0; -104,8; 40,0; 2,2; 0; 0,0 0,0; -104,5; 40,0; 2,3; 0; 0.0' – user1301295

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

  • Нет связанных вопросов^_^