【发布时间】:2015-01-15 16:37:08
【问题描述】:
我有一个数据文件,它本质上是一个固定宽度的文本文件。文本中有可变数量的空格和位置。我正在尝试使用 python 将文件解析为列表,但无法找出合适的正则表达式(当然也对非正则表达式选项开放)。
Date Run By Level 1 Level 2 Level 3 Level 4 Level 5 Level 6 Level 7 Level 8 Level 9
11-15-2014 12:27:43 AM 1 ** 259.0
11-15-2014 7:47:09 AM 1 ** 98.0
11-15-2014 3:45:07 PM 1 ** 785.0
11-16-2014 12:27:43 AM 1 ** 245.0
11-16-2014 7:51:36 AM 1 ** 96.0
11-16-2014 3:43:12 PM 1 ** 788.0
11-17-2014 12:27:43 AM 1 ** 248.0
11-17-2014 7:51:21 AM 1 ** 104.0
11-17-2014 12:45:57 PM 1 ** 97.0 257.0 793.0
11-17-2014 3:46:33 PM 1 ** 792.0
11-18-2014 12:32:31 AM 1 ** 253.0
11-18-2014 7:50:31 AM 1 ** 104.0
11-18-2014 3:48:43 PM 1 ** 781.0
11-19-2014 12:30:36 AM 1 ** 260.0
11-19-2014 8:40:26 AM 1 ** 102.0
11-19-2014 3:47:45 PM 1 ** 803.0
11-20-2014 12:28:40 AM 1 ** 243.0
11-20-2014 7:53:38 AM 1 ** 107.0
11-20-2014 3:43:55 PM 1 ** 787.0
11-21-2014 1:03:45 AM 0 PS 245.0
11-21-2014 7:52:55 AM 1 ** 101.0
11-21-2014 3:44:09 PM 1 ** 789.0
11-22-2014 12:37:26 AM 1 ** 250.0
11-22-2014 7:49:55 AM 1 ** 103.0
到目前为止,我已经尝试过:
for line in f:
line = re.split(r' (?=[A-Z])| (?=[0-9])| ',line)
但是,我什至没有对齐列。我需要他们排队以供下游使用。
所需的输出是(抱歉,行数有限,手动解析它是致命的!)。
['Date', '', 'Run', 'By', 'Level 1', 'Level 2', 'Level 3', 'Level 4', 'Level 5', 'Level 6', 'Level 7', 'Level 8', 'Level 9','\r\n']
['\r\n']
['\r\n']
['11-15-2014', '12:27:43', 'AM 1', '**', '', '259.0', '', '', '', '', '', '', '', '\r\n']
['11-15-2014', '7:47:09', 'AM 1', '**', '98.0', '', '', '', '', '', '', '', '', '\r\n']
['11-15-2014', '3:45:07', 'PM 1', '**', '', '', '785.0', '', '', '', '', '', '', '\r\n']
...
...
['11-17-2014', '12:45:57', 'PM 1', '**', '97.0', '257.0', '793.0', '', '', '', '', '', '', '\r\n']
本质上是 13 项后跟换行符;将日期和时间组合到一个字段中就可以了,主要是我需要日期和三个级别来正确排列;只有级别 1、级别 2 和级别 3 的值。值通常是单个级别/行,但偶尔会有全部三个(如图所示)。
【问题讨论】:
-
预期输出是什么
-
我强烈建议尽可能更改该文件的布局。这是一团糟,拆分/解析它不可避免地会很麻烦。
-
你的分裂背后的逻辑是什么?显示一个愿望输出
-
文件中有标签吗?它看起来像是标签分隔的。
-
OP 确认这些是空格。 正确 的答案是将文件格式更改为某种标准格式。但我确信一些黑客正在向我们走来:)