从大型非矩形文本中提取数据

时间:2014-01-07 10:04:54

标签: python matlab extraction

我有一个很大的非矩形文本文件,我需要从中提取数据。我更喜欢用Python做,但Matlab也很好。 我想从以下示例中的“相关”名称中提取的数据如下所示:

CLASS MIKE(2栏)
01 02(CLASS和MIKE的最后2个数字)
03 04
05 06

下面是文本文件的示例,名称为“related”的段落随机出现。每条记录用两个空行分隔。

-CLASS 36463601  
-NAME RELEVANT  
-FAX -PHONE OSCAR -NO 36468500  
-FAX -PHONE LIMA -NO 745674600  
-FAX -PHONE DELTA -NO 46778400  
-FAX -PHONE MIKE NO 74757502   
-HOME 3232


-CLASS 36463603  
-NAME RELEVANT  
-FAX -PHONE OSCAR -NO 36468500  
-FAX -PHONE LIMA -NO 745674600  
-FAX -PHONE DELTA -NO 46778400  
-FAX -PHONE BRAVO -NO 46778400  
-FAX -PHONE MIKE NO 74757504     
-HOME 3232  


-CLASS 36463600  
-NAME NOT RELEVANT  
-FAX -PHONE OSCAR -NO 36468500  
-FAX -PHONE LIMA -NO 745674600  
-FAX -PHONE DELTA -NO 46778400  
-FAX -PHONE BRAVO -NO 46778400  
-FAX -PHONE MIKE NO 74757503   
-HOME 3232  


-CLASS 36463605  
-NAME RELEVANT  
-FAX -PHONE OSCAR -NO 36468500  
-FAX -PHONE LIMA -NO 745674600  
-FAX -PHONE DELTA -NO 46778400  
-FAX -PHONE BRAVO -NO 46778400  
-FAX -PHONE MIKE NO 74757506     
-HOME 3232  

非常感谢任何输入。

1 个答案:

答案 0 :(得分:0)

嗯,你没有尝试任何事情,所以我没有提供任何代码。但我可以分享用于解析数据的算法。有了这个,我相信当你遇到实施问题时,你应该能够提出具体的问题。此外,我试图接近pythonic表达式,所以一切都应该很容易转换为实际的代码。

这将遍历整个文件和缓冲行,最多两个空行。然后在处理过程中存在相关行的情况下存储缓冲区。它实际上是一个简单的状态机。 linesrelevant_records可以是python列表。

1. For each `line` in text file:
 1.1. if `line` is empty then `empty_lines++` else append `line` to `lines`.
 1.2. if `empty_lines == 2` then:
   1.2.1. if `record_relevant` then output/save `lines` 
          (e.g relevant_records.append(lines))
   1.2.2. `record_relevant = false`
   1.2.3. `empty_lines = 0`
   1.2.4. `lines = []` #clear buffer
 1.3. if `line` contains `NAME RELEVANT` then `record_relevant = true`.

如果后面没有两个空行,你也应该在最后一次记录后调用1.2.1-4

您可以将其分组为函数和类,以使其更漂亮,更好地设计和维护。

相关问题