2013-02-08 2 views
1

꽤 많이 검색했지만 특정 줄 번호의 CSV 파일에서 데이터를 읽을 수있는 방법을 찾지 못했습니다.python - 마지막 줄에서 csv 파일 읽기

csv 파일은 즉시 업데이트됩니다. 구분 기호는 시간 t1에서 이렇게 탭 공간 , 더 정확하게는 :

1 2 3 
5 6 7 
8 9 10 
11 12 13 
14 15 16 

시간 t2에서 그것은 내가 콜렉션 (양단 큐)가

1 2 3 
5 6 7 
8 9 10 
11 12 13 
14 15 16 
17 18 19 

인 나는를 추가 할 데이터 coloumn0에서 CSV 파일. 시간 0 : 내가 작성한 코드는이 작업을 수행 할 수있는 순간에

시간 1에서

[deque([0, 0, 0, 0, 0], maxlen=5)] 

:

[deque(['5', '8', '11', '14','17'])] 
시간 : 2에서

[deque(['1', '5', '8', '11', '14'])] 

스크립트로 작성한 코드는 원하는 형식으로 읽는 것입니다.

Question: 

그러나 어느 시점에서 파일을 다시 열 때 'x'. 내가 한 줄을 읽고 다음 파일로 이동하는 것이

[deque(['8', '11', '14','17','x'])] 

하지

[deque(['1', '5', '8', '11', '14'])] 

에서 읽을해야하며 가능할까요? 제가 이것을 할 수있게 해주는 도서관이 있습니까?

나는 분명합니까? 또는 나는 약간의 정보를주기 위해 빠져 있습니까?

커티스에서 (그에게 모든 크레딧을) 입력을 취함으로써이 질문에 대한 답을 업데이트 :

perf_his = [] 

for a in range(len(filename)): 
perf_his += [deque([0]*5,maxlen=5)] 
for a in range(len(filename)): 
lines = open(filename[a]).readlines()[-NUM_LINES:] 
mydata = [line.split()[0] for line in lines] 
for i in range(0, len(mydata)): 
    perf_his[a].append(mydata[i]) 
    print perf_his 
+0

당신은 적응 고려해 볼 수 있습니다 http://code.google.com/p/을 pytailer/ –

+1

왜 파일을 다시 열 것인지, 왜 파일 핸들을 다시 사용하지 않는지 혼란 스럽습니다. 'x'에서 다시 열려면 'x'행이 필요합니다. 'x'+ 5 행, 1 행은 5 행의 데이터를 읽지 만 'x'의 예는 마지막 행을 표시합니다. dequeue에서 가져 오려는 것이지만 아직 csvreader에서 새 데이터가 검색되면 dequeue에 추가하려고합니다. CSV 파일에 더 이상 추가 할 데이터가 없을 때 어떻게 알 수 있습니까? – sotapme

+0

나는 계속해서 읽어야하는 파일이 여러 개 있습니다. 그러기 위해서는 하나의 파일 핸들러를 닫은 다음 다른 핸들러를 다시 열어야합니다. 권리? 프로그램을 종료하면 csv 파일에 더 이상 데이터가 기록되지 않습니다. – pistal

답변

2

실제로 뒤로 파일을 읽을 하시겠습니까? 당신이 게시 한 것에서 마지막 5 라인을 처리하기를 원하는 것처럼 보입니다. 그렇지 않으면 t2에서 deque ([ '5', '8', '11', '14', '17']) 대신 deque ([ '17', '14', '11', '8', '5']).

당신이 정말 마지막 5 줄을 처리한다 뭘 원하는지,이 같은 것을 할 수 있다고 가정 -

from collections import deque 

NUM_LINES=5 #The number of lines to process. Should equal the deque maxlen  

lines = open("myfile.csv").readlines()[-NUM_LINES:] #Assumes the file can fit into memory 
mydata = [line.split()[0] for line in lines] 
d = deque(mydata, maxlen=NUM_LINES) 
print d 
+0

늦어서 반갑습니다. 죄송합니다. 나는 csv 파일에서 첫 번째 coloumn의 마지막 다섯 줄을 처리하려고합니다. 내가 코드를 풀어 보자. – pistal