使用python解析带有真实大小写的日志文件-如何跳过csv.reader for循环中的行,如何使用不同的分隔符

使用python解析带有真实大小写的日志文件-如何跳过csv.reader for循环中的行,如何使用不同的分隔符,python,csv,delimiter,Python,Csv,Delimiter,下面是我要分析的日志文件的一部分: 下面是我正在写的代码: import csv with open('Coplanarity_PedCheck.log','rt') as tsvin, open('YX2.csv', 'wt') as csvout: read_tsvin = csv.reader(tsvin, delimiter='\t') for row in read_tsvin: print(row) filters = row[0]

下面是我要分析的日志文件的一部分:

下面是我正在写的代码:

import csv

with open('Coplanarity_PedCheck.log','rt') as tsvin, open('YX2.csv', 'wt') as csvout:
    read_tsvin = csv.reader(tsvin, delimiter='\t')
    for row in read_tsvin:
        print(row)
        filters = row[0]
        if "#Log File Initialized!" in filters:
            print(row)
            datetime = row[0]
            print("looklook",datetime[23:46])
            csvout.write(datetime[23:46]+",")
            BS = row[0]
            print("looklook",BS[17:21])
            csvout.write(datetime[17:21]+",")
            csvout.write("\n")
    csvout.close()
我需要从第1行获取日期和时间信息,然后从第2行获取“左”,然后需要跳过第4节。我该怎么做

由于
csv.reader
使行1成为一个只包含1个元素的列表,因此我再次将其转换为字符串,以拆分出我需要的日期时间信息。但我认为这是没有效率的

我对第2行做了同样的事情,然后我想跳过第3-6行,但我不知道怎么做


另外,
csv.reader
将我的浮点数据转换为文本,在将它们写入另一个文件之前,如何将它们转换回文本?

您将需要学习使用

例如,您可以这样做:

with open('Coplanarity_PedCheck.log','rt') as tsvin, open('YX2.csv', 'wt') as csvout:
    read_tsvin = csv.reader(tsvin, delimiter='\t')
    # Get the first line and use the first field
    header = read_tsvin.next()[0]
    m = re.search('\[([0-9: -]+)\]', row)
    datetime = m.group(1)
    csvout.write(datetime, ',')

    # Find if 'Left' is in line 1
    direction = read_tsvin.next()[0]
    m = re.search('Left', direction)
    if m:
        # If m is found print the whole line
        csvout.write(m.group(0))
    csvout.write('\n')

    # Skip lines 3-6
    for i in range(4):
        null = read_tsvin.next()

    # Loop over the rest of the rows
    for row in tsvin:
        # Parse the data

    csvout.close()
修改此项以查找包含“#日志文件已初始化!”的行而不是硬编码的第一行将是相当简单的使用正则表达式。看看正则表达式文档


这可能不是你想要做的,而是一个好的起点的建议

您将要学习如何使用

例如,您可以这样做:

with open('Coplanarity_PedCheck.log','rt') as tsvin, open('YX2.csv', 'wt') as csvout:
    read_tsvin = csv.reader(tsvin, delimiter='\t')
    # Get the first line and use the first field
    header = read_tsvin.next()[0]
    m = re.search('\[([0-9: -]+)\]', row)
    datetime = m.group(1)
    csvout.write(datetime, ',')

    # Find if 'Left' is in line 1
    direction = read_tsvin.next()[0]
    m = re.search('Left', direction)
    if m:
        # If m is found print the whole line
        csvout.write(m.group(0))
    csvout.write('\n')

    # Skip lines 3-6
    for i in range(4):
        null = read_tsvin.next()

    # Loop over the rest of the rows
    for row in tsvin:
        # Parse the data

    csvout.close()
修改此项以查找包含“#日志文件已初始化!”的行而不是硬编码的第一行将是相当简单的使用正则表达式。看看正则表达式文档


这可能不是你想要做的,而是一个好的起点的建议

请将您的日志和所需输出添加为代码段,而不是图像。这是一个非常特定于数据的问题。我的感觉是,如果你能改变日志的输出方式,你将避免很多麻烦。请,添加你的日志和所需的输出不是作为图像,而是作为代码片段。这是一个非常具体的数据问题。我的感觉是,如果你能改变日志的输出方式,你会避免很多麻烦,我设法通过跳过行方法。现在我有另一个问题。对于第6节,我希望读取所有9行,并将其作为一行写入另一个csv文件中,以“,”作为分隔符。我的代码如下,只能逐行打印。。。对于read_tsvin:checkendline=str(行[0])中的行,如果checkendline:row=next(read_tsvin)中的“END”,则中断其他:write_csvout=csv.writer(csvout,分隔符=','))write_csvout.writerow(行)打印(写下)@user5963823这与原始问题有很大的不同,您可能需要发布一个新问题。您可能希望在编写之前查看如何将所有元素合并到一个列表中。我成功地通过了跳过行方法。现在我遇到了另一个问题。对于第6节,我希望读取所有9行并将其写入另一个csv文件中,如下所示一行以“,”作为分隔符。我的代码如下所示,对于read_tsvin:checkendline=str(行[0])中的行,如果checkendline:row=next(read_tsvin)中的“END”,则只能逐行打印。其他:write_csvout=csv.writer(csvout,分隔符=','))write_csvout.writerow(row)print(write_csvout)@user5963823这与原始问题差异很大,您可能需要发布一个新问题。在编写之前,您可能需要查看如何将所有元素合并到一个列表中。