Python:从CSV中提取模式

时间:2014-02-03 10:40:46

标签: python csv

以下是CSV文件的典型内容示例。

['**05:32:55PM**', '', '', 'Event Description', '0', "89.0        near Some Street; Suburb Ext 3; in Town Park; [**Long 37\xb0 14' 34.8 E Lat 29\xb0", '']
['', '', '', '', '', "17' 29.1 S** ]", '']
['06:09:11PM', '', '', 'Event Description', '0', "89.0        near Someother Street; Suburb Ext 3; in Town Park; [Long 37\xb0 14' 34.9 E Lat 29\xb0", '']
['', '', '', '', '', "17' 29.1 S ]", '']
['Report Line Header                                                                                                                                ', '', '', '', '', '', '']
['HeaderX', ': HeaderY', '', 'HeaderZ', '', 'HeaderAA', '']
['From Date', ': 2014/01/17 06:00:00 AM', '', 'To Date   : 2014/01/17 06:15:36 PM', '', 'HeaderBB', '']
['HeaderA', 'HeaderB', 'Header0', 'Header1', 'Header2', 'Header3', '']
['', '', '', '', 'Header 4', 'Header5', '']

从包含日期/时间和位置(标有** - **)的每一行,我想提取相关信息,而忽略其余信息。

即使我只能将结果打印到屏幕上,也没关系,理想情况下,创建一个仅包含时间和纬度/经度的新CSV。

2 个答案:

答案 0 :(得分:1)

如果您确实想要提取此示例中格式化的此文件的数据,那么您可以使用以下内容,因为每行中的数据都有一个列表表示:

>>> import ast
>>> f = open('data.txt', 'r')
>>> lines = f.readlines()
>>> for line in lines:
...     list_representation_of_line = ast.literal_eval(line)
...     for element in list_representation_of_line:
...             if element.startswith('**') and element.endswith('**'):
...                     print list_representation_of_line
...                     # or print single fields, e.g. timeIndex = 0 or another index
...                     # print list_representation_of_line[timeindex]
...                     break
...
['**05:32:55PM**', '', '', 'Event Description', '0', "89.0        near Some Street; Suburb Ext 3; in Town Park; [**Long 37\xb0 14' 34.8 E Lat 29\xb0", '']
>>>

否则您应该将数据重新格式化为csv

答案 1 :(得分:-1)

如果这真的是你的CSV文件的样子,我甚至都不会打扰。它在不同的行上有不同的数据,并且有大量嵌套的特殊字符串,分隔符中有分隔符。

即使你得到你的纬度和长数字,它们看起来像是十进制,十六进制和字符数据的奇怪组合。

我认为你会因为给人的印象是你能以编程方式处理该格式的数据而感到麻烦。如果它只是一次性的任务,那就是数据的范围,我会手工完成。

如果没有,我认为正确的解决方案是推迟并尝试获得更清晰的数据。