【发布时间】:2016-07-09 06:17:35
【问题描述】:
我正在使用 python 从我的 csv 文件中读取数据。但是我只想从 csv 的尾部读取特定的(最后一个有效的)行,还有一个问题是函数应该只在有效时才返回整行。谁能帮我解决这个问题?
下面是我的 csv 文件的样子:
Sr. Add A B C D
0 0013A20040D6A141 -308.1 -307.6 -307.7 -154.063
1 0013A20040DC889A -308.7 -311.7 -311.7 -154.263
2 0013A20040DC88C3 -310.1 -310.1 -310.2 -154.863
3 0013A20040D6A141 -308.2 -306.8 -307.7 -153.863
4 0013A20040DC889A -308.7 -311.4 -311.1 -153.263
5 0013A20040DC88C3 -- -- -- --
6 0013A20040D6A141 -308.7 -308.3 -305.2 -154.663
我正在尝试的代码是:
def last_data(address):
i = sum(1 for line in open("filename.csv", 'r'))
print i # number of lines in csv
cache = {} # dict that saved the last data for particular address
n = 3
with open("filename.csv",'r') as f:
q = deque(f, 3) # 3 lines read at the end
qp = [''] * n
if i +1 >= n: # for checking whether the number of lines greater than number of add.
for k in range(n):
qp[k] = q[k].split(',')
if address == str(qp[k][1]): # check for particular address in row
# if the row has data than put it into json object with address as key and nested key as columns 'A', 'B', etc.
cache.update({address: {'A':struct.pack('>l',int(float(qp[k][3]) * 10)),
'C':struct.pack('>l',int(float(qp[k][4]) * 10))
}})
return cache[address]['A'], cache[address]['C']
对于last_data('0013A20040DC88C3'),返回第 5 行无效数据,我想在其中显示第 2 行。任何人都可以告诉我该怎么做吗?
【问题讨论】:
-
如果数据集不是很大,我可能会使用 pandas,告诉它你使用什么分隔符(tab?),将缺失指定为“---”并在最后删除它们
-
@ChristianSauer 否。它是大型 csv 文件。我已将分隔符与
,(comma)一起使用。但是在这里我用tab展示了。你能给我提供pandas的例子吗? -
也许你应该解释一下你的代码...
-
@JulienBernu 代码已编辑。