사용방법은 다음과 같다. 우선 리눅스 시스템의 경우 기본적으로 설치되어 있지만, 윈도우즈의 경우 python 2.x 버전의 프로그램을 설치한다. 그리고 USB2000에서 획득한 여러개의 스펙트럼 데이터 파일들을 분류하여 하나의 파일로 만들고 싶은 것들만 하나의 디렉토리로 이동 시키고, 해당 디렉토리에 이 스크립트 파일을 복사하고 실행시키면 해당 디렉토리에 하나의 파일로 합쳐진 매트릭스형태의 스펙트럼 데이터가 생성된다.
# Usage: copy the script into the directory existing spectrum data and execute it.
#!/usr/bin/python
import os
#import os.path
path = "./"
dirlist = os.listdir(path)
newdirlist = []
for fname in dirlist:
if os.path.isfile(fname) and fname.find(".Master.Scope") != -1:
i = dirlist.index(fname)
num = fname.split('.')
if num[0].isdigit():
newdirlist.append(int(num[0]))
newdirlist.sort()
#newdirlist.sort(reverse=True)
#print newdirlist
# the number of samples
samples = len(newdirlist)
# the number of pixels
fname = str(newdirlist[0]) + ".Master.Scope"
f = open(fname)
lines = f.readlines()
f.close()
for line in lines:
if str(line).find("Number of Pixels in File: ") >= 0:
columns = line.split(": ")
pixels = int(columns[1])
else:
if str(line).find(">>>>>Begin Spectral Data<<<<<") >= 0:
istart = lines.index(line) + 1
else:
if str(line).find(">>>>>End Spectral Data<<<<<") >= 0:
iend = lines.index(line) - 1
print "the # of samples: ", samples
print "the # of pixels: ", pixels
print "the index of start: ", istart
print "the index of end: ", iend
signals = [ [ 0 for j in range(samples+1) ] for i in range(pixels) ]
for j in range(istart, iend+1, 1):
line = lines[j]
columns = line.split("\t")
#print j, columns[j]
signals[j-istart][0] = columns[0].strip();
# make directory for merged file
if not os.path.isdir("merged"):
os.mkdir("merged")
for i in range(0, samples, 1):
num = newdirlist[i]
# for num in newdirlist:
# read lines in each file
fname = str(num) + ".Master.Scope"
f = open(fname)
lines = f.readlines()
f.close()
for j in range(istart, iend+1, 1):
line = lines[j]
columns = line.split("\t")
#print j, columns[j]
signals[j-istart][i+1] = columns[1].strip();
fname = "merged/USB2000.dat"
f = open(fname, "w")
for j in range(pixels):
for i in range(samples+1):
f.write(signals[j][i]+"\t")
f.write("\n")
f.close()
댓글 없음:
댓글 쓰기