处理csv文件中的页脚行?

时间:2015-07-28 19:09:00

标签: python python-2.7

我的输入文件底部有一行,如下所示:

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

我带着这些条目并将它们放入词典中,所以我总是有一条线被搞砸了。我使用reader.next()方法作为标题,是否有与此页脚记录类似的内容?

3 个答案:

答案 0 :(得分:1)

如果您通过pandas read_csv导入csv,您可以让pandas自动跳过页脚行...

import pandas as pd
import numpy as np
datastr=pd.read_csv('datafile',delimiter=',',header=[0,1,2],skipfooter=1)
datastr=datastr.as_matrix()

这将使用行0,1,2作为标题行跳过文件的最后一行...

答案 1 :(得分:1)

没有遍历所有元素或计算迭代器的长度,就无法访​​问迭代器中的最后一个元素。

在这种情况下,你可以使用itertools.tee创建一个读者对象的副本,然后next比主读者对象多一次,直到新的迭代器落在主要的前面一个项目读者,然后每次迭代主读者对象时,可以在next语句中调用try-except函数。当它引发StopIteration错误时,您停止对主读取器对象的迭代。

示例:

import csv
from itertools import tee
with open('eggs.csv', 'rb') as csvfile:
     spamreader = csv.reader(csvfile, delimiter=',')
     next_reader,spamreader=tee(spamreader)
     next(next_reader)
     try :
        for row in spamreader:
            print ', '.join(row)
            next(next_reader)
     except StopIteration:
          pass

答案 2 :(得分:0)

import csv

with open('file.csv', 'rb') as f:
    reader = csv.reader(f)
    next(reader, [])  # Skip header.
    last_row = next(reader, [])  # Fetch the first row.
    for new_row in reader:
        process(last_row)
        last_row = new_row

    # At this point `last_row` is the last row,
    # and has not been processed.