2013-02-05 4 views
0

텍스트 파일의 값을 배열로 읽어야합니다.이 파일은 하나의 파일 인 ChiTableSingle을 사용하여 올바르게 작동하지만 여러 파일을 사용하려고하면 실패합니다. 그것은 정확하게 라인을 읽고, 그리고 Z를 생산하는 것,하지만 단지 []로 z [0]을 제공하고, 그럼 내가 시퀀스 배열 요소를 설정, 오류가 발생.여러 파일 및 배열 읽기

이 내 현재 코드입니다 :

rootdir='C:\users\documents\ChiGrid' 
fileNameTemplate = r'C:\users\documents\ContourPlots\Plot{0:02d}.png' 

for subdir,dirs,files in os.walk(rootdir): 
    for count, file in enumerate(files): 

     fh=open(os.path.join(subdir,file),'r') 
     #fh = open("ChiTableSingle.txt"); 

     print 'file is '+ str(file) 

     Z = [] 
     for line in fh.readlines(): 
      y = [value for value in line.split()] 
      Z.append(y) 

     print Z[0][0] 
     fh.close() 

     plt.figure() # Create a new figure window 

     Temp=open('TempValues.txt','r') 
     lineTemp=Temp.readlines() 
     for i in range(0, len(lineTemp)): 
      lineTemp[i]=[float(lineTemp[i])] 

     Grav=open('GravValues2.txt','r') 
     lineGrav=Grav.readlines() 
     for i in range(0, len(lineGrav)): 
      lineGrav[i]=[float(lineGrav[i])] 

     X,Y = np.meshgrid(lineTemp, lineGrav) # Create 2-D grid xlist,ylist values 

     plt.contour(X, Y, Z,[1,2,3], colors = 'k', linestyles = 'solid') 
     plt.savefig(fileNameTemplate.format(count), format='png') 
     plt.clf() 

답변

0

내가 처음으로 느낀 것은 당신의 지능형리스트 y = [value for ...] 만 변환 할 것이다, 그래서합니다 (split() 함수에서) 문자열의 목록을 반환하는 것입니다 것입니다 그 (것)들을 음모를 꾸미려고하기 전에 어느 시점에서 숫자 형식으로 변환하십시오.

또한 읽는 파일이 공백으로 구분 된 숫자 표인 경우 numpy.loadtxt(fh)을 사용하는 것이 좋습니다. 분할 및 유형 변환을 처리하고 2-d numpy.array을 반환하기 때문입니다. 행이 일반 파이썬 주석 문자 (예 : # this line is a comment and will be ignored)로 시작하면 무시할 주석 텍스트를 추가 할 수도 있습니다.

또 다른 생각은 파이썬 메서드 (예 : 단어 file이 경우)와 동일한 변수 이름을 사용할 때주의해야합니다. 일단 다른 것으로 다시 정의하면 이전 정의는 사라집니다.

+0

y = [...]을 사용하는 단일 파일에서 모두 정상적으로 작동합니다. 그래도 float 또는 다른 것으로 변환해야합니까? 또한 np.loadtxt 시도했지만 거기에 특성 readlines 등이 있었다고 말하고 있었다. – user1841859