Python 将格式化文本文件解析为CSV

Python 将格式化文本文件解析为CSV,python,parsing,csv,Python,Parsing,Csv,我在一个文件中有好几百个这样的作业度量定义,我正试图将其解析为一个格式化的.csv文档 Job Name Last Start Last End ST Run Pri/Xit ________________________________________________________________ _______________

我在一个文件中有好几百个这样的作业度量定义,我正试图将其解析为一个格式化的.csv文档

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)为否