我有一个很大的非矩形文本文件,需要从中提取数据。我更喜欢用Python,但Matlab也不错。我想要从“相关”的名称中提取的数据如下所示:
类麦克风(2列)
01 02 ( CLASS和MIKE的最后2个数字)
03 04
05 06
下面是一个文本文件的例子,名字为“相关”的段落是随机出现的。每条记录由两个空行分隔。
-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 我们非常感谢您的任何意见。
发布于 2014-01-07 18:32:36
嗯,你没有尝试任何事情,所以我不会给出任何代码。但我可以分享我用来解析数据的算法。有了这个,我相信当你在实现某些东西时遇到麻烦时,你应该能够问一些具体的问题。另外,我尽量接近pythonic表达式,所以一切都应该很容易转换成实际的代码。
这将在整个文件和缓冲行中爬行,直到两个空行。如果在处理过程中存在相关行,则存储缓冲区。它实际上是一个简单的状态机。lines和relevant_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。
您可以将其分组为函数和类,以使其更美观,更好地设计和维护。
https://stackoverflow.com/questions/20968774
复制相似问题