2013-02-05 79 views
0

我需要將文本文件中的值讀入數組Z.這可以很好地使用單個文件ChiTableSingle,但是當我嘗試使用多個文件時失敗。它似乎是正確讀取行,並生成Z,但只給[z] [],然後我得到錯誤,設置一個序列的數組元素。讀取多個文件和數組

這是我當前的代碼:

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。如果行以常規python註釋字符開頭(例如# this line is a comment and will be ignored),您也可以添加它將忽略的註釋文本。

只是另一個想法,我會小心使用與python方法相同的變量名(例如,在這種情況下單詞file)。一旦你將它重新定義爲別的東西,以前的定義就不復存在了。

+0

對於使用y = [...]的單個文件它都可以正常工作,但是仍然需要先將其轉換爲浮點數或其他東西?我也嘗試過np.loadtxt,但那是說沒有屬性readlines等。 – user1841859