Python 将格式化文本文件解析为CSV
我在一个文件中有好几百个这样的作业度量定义,我正试图将其解析为一个格式化的.csv文档Python 将格式化文本文件解析为CSV,python,parsing,csv,Python,Parsing,Csv,我在一个文件中有好几百个这样的作业度量定义,我正试图将其解析为一个格式化的.csv文档 Job Name Last Start Last End ST Run Pri/Xit ________________________________________________________________ _______________
Job Name Last Start Last End ST Run Pri/Xit
________________________________________________________________ ____________________ ____________________ __ _______ ___
B9043CC_APP_DMLD_025_FR_xpabbdu1_D 03/12/2014 18:21:32 03/12/2014 18:22:07 SU 49744331/3
Status/[Event] Time Ntry ES ProcessTime Machine
-------------- --------------------- -- -- --------------------- ----------------------------------------
[FORCE_STARTJOB] 03/12/2014 17:30:52 0 PD 03/12/2014 17:30:53
< >
STARTING 03/12/2014 17:30:53 1 PD 03/12/2014 17:30:53 ab-shared-batch
RUNNING 03/12/2014 17:31:06 1 PD 03/12/2014 17:31:07 ab-shared-batch
SUCCESS 03/12/2014 17:31:46 1 PD 03/12/2014 17:31:47
[FORCE_STARTJOB] 03/12/2014 18:16:06 0 PD 03/12/2014 18:16:07
< >
STARTING 03/12/2014 18:16:07 2 PD 03/12/2014 18:16:07 ab-shared-batch-
RUNNING 03/12/2014 18:16:19 2 PD 03/12/2014 18:16:20 ab-shared-batch-
FAILURE 03/12/2014 18:17:02 2 PD 03/12/2014 18:17:03
[*** ALARM ***]
JOBFAILURE 03/12/2014 18:17:03 2 PD 03/12/2014 18:17:04
[FORCE_STARTJOB] 03/12/2014 18:21:18 0 PD 03/12/2014 18:21:19
< >
STARTING 03/12/2014 18:21:19 3 PD 03/12/2014 18:21:19 ab-shared-batch-
RUNNING 03/12/2014 18:21:32 3 PD 03/12/2014 18:21:32 ab-shared-batch-
SUCCESS 03/12/2014 18:22:07 3 PD 03/12/2014 18:22:08
实际开始/结束时间和actaul开始/结束日期来自“处理时间”列。我只希望上面的数据,不希望包含“---”的任何文本出现在.csv文件中的任何位置。如上所述,我在一个文件中有几百个这样的定义
我知道python有一个内置的csv模块,我正在使用它来写入标签colums:
import csv
import sys
infile = '/home/n5acc7/test/output/testtest.csv'
f = open(infile, 'wt')
try:
writer = csv.writer(f)
writer.writerow( ('System Number', 'Job Name' 'Target Machiene', 'Status', 'Actual Start Date' 'Actual Start Date', 'Actual End Time', 'Actual End Date', 'Actual End Time',) )
finally:
f.close()
但是从语法分析的角度来看,我不确定从哪里开始。我正在运行python 2.4.3。正则表达式怎么样?Python支持这一点。Perl非常适合文件处理。CSV文件可以用制表符或逗号分隔(格式有一些差异),因此,如果你有一个文件句柄,它是一种非常容易写入的格式。该语言不必局限于其CSV功能,只要您熟悉它,或者它对解析非常有效。就正则表达式而言,这里有一些介绍的链接(如果您在确定方法后遇到了更具体的解析场景,可以更新此链接以解决这些问题): 还有更多的Perl版本,例如:
正则表达式使用得怎么样?Python支持这一点。Perl非常适合文件处理。CSV文件可以用制表符或逗号分隔(格式有一些差异),因此,如果你有一个文件句柄,它是一种非常容易写入的格式。该语言不必局限于其CSV功能,只要您熟悉它,或者它对解析非常有效。就正则表达式而言,这里有一些介绍的链接(如果您在确定方法后遇到了更具体的解析场景,可以更新此链接以解决这些问题): 还有更多的Perl版本,例如:
正则表达式使用得怎么样?Python支持这一点。Perl非常适合文件处理。CSV文件可以用制表符或逗号分隔(格式有一些差异),因此,如果你有一个文件句柄,它是一种非常容易写入的格式。该语言不必局限于其CSV功能,只要您熟悉它,或者它对解析非常有效。就正则表达式而言,这里有一些介绍的链接(如果您在确定方法后遇到了更具体的解析场景,可以更新此链接以解决这些问题): 还有更多的Perl版本,例如:
正则表达式使用得怎么样?Python支持这一点。Perl非常适合文件处理。CSV文件可以用制表符或逗号分隔(格式有一些差异),因此,如果你有一个文件句柄,它是一种非常容易写入的格式。该语言不必局限于其CSV功能,只要您熟悉它,或者它对解析非常有效。就正则表达式而言,这里有一些介绍的链接(如果您在确定方法后遇到了更具体的解析场景,可以更新此链接以解决这些问题): 还有更多的Perl版本,例如:
解析这个看起来很简单 一般逻辑:
read six lines (header)
get system number and batch name
until end of file:
read five lines
get machine name, status, start and end dates and times
if status is FAILURE
read two lines (clear error message)
还有一些实际的代码(尽管针对的是Python 2.7;您必须为Python 2.4做一些后移植,或者切换到更先进的Python):
INPUT=“/home/n5acc7/test/INPUT/batch1.log”
OUTPUT=“/home/n5acc7/test/OUTPUT/testtest.csv”
LINE=“{:解析这个看起来很简单
一般逻辑:
read six lines (header)
get system number and batch name
until end of file:
read five lines
get machine name, status, start and end dates and times
if status is FAILURE
read two lines (clear error message)
还有一些实际的代码(尽管针对的是Python 2.7;您必须为Python 2.4做一些后移植,或者切换到更先进的Python):
INPUT=“/home/n5acc7/test/INPUT/batch1.log”
OUTPUT=“/home/n5acc7/test/OUTPUT/testtest.csv”
LINE=“{:解析这个看起来很简单
一般逻辑:
read six lines (header)
get system number and batch name
until end of file:
read five lines
get machine name, status, start and end dates and times
if status is FAILURE
read two lines (clear error message)
还有一些实际的代码(尽管针对的是Python 2.7;您必须为Python 2.4做一些后移植,或者切换到更先进的Python):
INPUT=“/home/n5acc7/test/INPUT/batch1.log”
OUTPUT=“/home/n5acc7/test/OUTPUT/testtest.csv”
LINE=“{:解析这个看起来很简单
一般逻辑:
read six lines (header)
get system number and batch name
until end of file:
read five lines
get machine name, status, start and end dates and times
if status is FAILURE
read two lines (clear error message)
还有一些实际的代码(尽管针对的是Python 2.7;您必须为Python 2.4做一些后移植,或者切换到更先进的Python):
INPUT=“/home/n5acc7/test/INPUT/batch1.log”
OUTPUT=“/home/n5acc7/test/OUTPUT/testtest.csv”
行=”{:既能读又能写。你试过使用它的另一部分吗?既能读又能写。你试过使用它的另一部分吗?既能读又能写。你试过使用它的另一部分吗?既能读又能写。你试过使用它的另一部分吗?谢谢!get_头到底是什么,tho“啊?”休Bothwell@Matt:这是我在清理函数名时犯的一个错误:-/应该是read_header
,现在已修复。好的,我就是这么想的。谢谢!@Hugh bothwellaso,我相信在“sd,st,name=startine[5:8]”中应该有另一个值Bothwell@Matt:嗯,不是吗?startine[5:8]
提供了第5、6和7项,即开始日期、开始时间和机器名。Python切片语法有点像最后一项(8)的range()
不包括在内。谢谢!不过,到底是什么意思?@HughBothwell@Matt:这是我在清理函数名时犯的一个错误:-/应该是read\u header
,现在已修复。好的,我就是这么想的。谢谢!@Hugh bothwellaso,我相信“sd,st,name=startine[5:8]中应该有另一个值。”休Bothwell@Matt:嗯,否?startline[5:8]
为您提供第5、6和7项,即开始日期、开始时间和机器名。Python切片语法有点像range()
,最后一项(8)为否