1GB 파일을 읽고 로그 된 시계열 데이터를 얻는 가장 좋은 방법은 두 개의 열이있는 실시간 그래프를 생성하는 것입니다 시간과 다른 숫자)? 나는 당신이 파일을 꼬투리기의 다른 방법이다는 것을 본다.테일은 점점 커지는 동적 파일을 읽고 두 개의 열을 추출한 다음 그래프를 인쇄합니다.
3
A
답변
7
RRDTool과 같은 좋은 소리입니다.
하지만 파이썬을 고수하고 싶다면 내 프로그램에 데이터를 스트리밍하려면 꼬리를 사용하면됩니다 (파일이 계속 작성되었다고 가정 할 경우 Python에서 곧바로 open()이 작동합니다).
tail -F data.log | python myprogram.py
myprogram.py 같은 것을 볼 수 있었다 :
import sys
p = ... # create a pylab plot instance
for line in sys.stdin:
elements = line.split(',') # or whatever separator your file has in it
p.add(element[0], element[1]) # add data to the pylab plot instance
2
요한이 언급 한 바와 같이, 입력 할 수 있습니다 파일에 꼬리 출력,하지만 당신은 몇 가지 이유는 파일에서 모든 것을 처리하고 싶어 인한 경우 다소 동적 인 그래프의 예를 원한다면, 여기에
import math
import time
import pylab
def getDataTest(filePath):
s = 0
inc = .05
x_list=pylab.arange(0, 5.0, 0.01)
while 1:
s += inc
if abs(s) > 1:
inc=-inc
y_list = []
for x in x_list:
x += s
y = math.cos(2*math.pi*x) * math.exp(-x)
y_list.append(y)
yield x_list, y_list
def tailGen(filePath):
f = open(filePath)
#f.seek(0, 2) # go to end
for line in f: yield line
while 1:
where = f.tell()
line = f.readline()
if line:
yield line
else:
time.sleep(.1)
f.seek(where)
def getData(filePath):
x_list = []
y_list = []
maxCount = 10
for line in tailGen(filePath):
# get required columns
tokens = line.split(",")
if len(tokens) != 2:
continue
x, y = tokens
x_list.append(x)
y_list.append(y)
if len(x_list) > maxCount:
x_list = x_list[-maxCount:]
y_list = x_list[-maxCount:]
yield x_list, y_list
pylab.ion()
pylab.xlabel("X")
pylab.ylabel("Y")
dataGen = getData("plot.txt") # getDataTest("plot.txt") #
x_list, y_list = dataGen.next()
plotData, = pylab.plot(x_list, y_list, 'b')
#pylab.show()
pylab.draw()
for (x_list, y_list) in dataGen:
time.sleep(.1)
plotData, = pylab.plot(x_list, y_list, 'b')
pylab.draw()
당신은 요소를 픽업 할 수 있으며 문제가 해결 될 것이라고 생각합니다.
1
다음은 tail'er, 필터 (gawk) 및 플로터 (python)의 세 부분으로 구성된 유닉스 파이프입니다.
tail -f yourfile.log | gawk '/PCM1/{print $21; fflush();}' | python -u tailplot.py
여기 파이썬 스크립트입니다. 1 (y) 또는 2 (x y) 개의 데이터 열을 공급할 수 있습니다. gawk
을 사용하지 않으면 버퍼링을 비활성화하는 방법을 알아야합니다. 예 : sed -u
.
pa-poca$ cat ~/tailplot.py
import math
import time
import sys
import pylab
pylab.ion()
pylab.xlabel("X")
pylab.ylabel("Y")
x = []
y = []
counter = 1
while True :
line = sys.stdin.readline()
a = line.split()
if len(a) == 2:
x.append(a[0])
y.append(a[1])
elif len(a) == 1:
x.append(counter)
y.append(a[0])
counter = counter + 1
pylab.plot(x, y, 'b')
pylab.draw()
관련 문제
- 1. 두 개의 열을 병합
- 2. perl은 두 파일을 비교하고 일치하는 줄을 인쇄합니다.
- 3. 스크립트는 줄에서 읽고, 값에서 선택하고, 파일에 인쇄합니다.
- 4. 동일한 파일을 읽고 쓰는 두 개의 프로세스 Python
- 5. 두 개의 열을 스칼라로 곱하면
- 6. JUNG에서 두 개의 그래프를 결합하는 방법은 무엇입니까?
- 7. 두 개의 동적 라이브러리 병합
- 8. 리소스에있는 파일을 추출한 다음 C++로 파일에 저장하십시오.
- 9. 리치 텍스트 데이터/파일을 포함하는 두 개의 열을 결합하는 방법
- 10. 두 개의 열을 사용하여 MySQL의 순서
- 11. 파일을 업로드 한 다음 두 개의 다른 디렉토리에 복사 하시겠습니까?
- 12. GROUP BY를 사용하여 두 개의 열을 그룹화하십시오.
- 13. HTTP 요청에서 콘텐츠를 추출한 다음 선택한 콘텐츠를
- 14. DataGridview에서 두 개의 열을 결합 하시겠습니까?
- 15. 는 동일한 공간 두 개의 열을 연결
- 16. MySQL의 하나에 두 개의 열을 결합
- 17. 동일한 열을 가진 두 개의 TableLayout
- 18. 하나의 표로 두 개의 열을 결합하십시오 MySQL
- 19. Zend DB 두 개의 열을 연결하십시오.
- 20. 두 개의 SQL Server 테이블에서 열을 교환하십시오.
- 21. 는 한 테이블에 두 개의 열을 비교
- 22. 유창한 Nhibernate가 두 개의 ID 열을 추가합니까?
- 23. 두 개의 다른 열을 기준으로 열을 채우는 매크로
- 24. 파일의 데이터를 개별적으로 읽고 C++의 두 열을 곱합니다.
- 25. 두 개의 YAML 파일을 동기화하십시오.
- 26. 자바에서 파일을 읽고 쓰자.
- 27. DataGridView에서 열을 읽고 문자열 배열에 배치하십시오.
- 28. 두 개의 동적 이미지를 Jquery 링크로 바꿉니다
- 29. LaTeX 문서의 처음 두 페이지 만 인쇄합니다.
- 30. Python : xar 파일을 tar.gz 패키지에서 바로 인쇄합니다.