我的输入文件底部有一行,如下所示:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
我带着这些条目并将它们放入词典中,所以我总是有一条线被搞砸了。我使用reader.next()
方法作为标题,是否有与此页脚记录类似的内容?
答案 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.