2011년 6월 23일 목요일

여러 파일로된 USB2000의 스펙트럼 데이터들을 하나의 파일로 합치는 python 프로그램

NIR 스펙트로미터인 USB2000에서 획득한 스펙트럼 데이터들을(여러개의 파일로 되어 있는) 하나의 파일로 된 매트릭스형태로 합성해 주는 python 스크립트 프로그램이다.

사용방법은 다음과 같다. 우선 리눅스 시스템의 경우 기본적으로 설치되어 있지만, 윈도우즈의 경우 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()  

댓글 없음:

댓글 쓰기