2015-02-05 49 views
2

我有以下代碼:Python的 - 類型錯誤:壓縮參數#1必須支持迭代

import numpy as np 
import scipy as sp 
import itertools 
import os 

rootdir = 'mydir'; # mydir changed from actual directory 

data = [] 

for i in range(1, 35): 
    data = [] 
    chari = str(i)+'/'; 
    newdir = rootdir+chari 
    print newdir 
    for root, dirs, files in os.walk(newdir): 
     for fname in files: 
      if fname == 'tc.out': 
       with open(os.path.join(root,fname)) as f: 
        lines_after_2 = f.readlines()[2:] 
        for line in lines_after_2: 
         fields = line.split() 
         rowdata = map(float,fields) 
         data.extend(rowdata) 
         column = zip(*rowdata) 
         for index, column in enumerate(columns): 
          print "In column %s, Max = %s, Min = %s" % (index, max(column), min(column)) 

我試圖找到每列的最大值和最小值(我真正的目標是找到最大和最小對於每一列,但第一,但我會盡力解決這個問題)。

在運行此代碼,我得到以下錯誤:

TypeError: zip argument #1 must support iteration 

這是我的數據是如何構成的:

variables = time T_1 T_2 T_3 T_4 T_5 
# 5 
3.0100000000e+03 3.0349158928e+02 3.0171422239e+02 2.9770226435e+02 2.9657072961e+02 2.9707000000e+02 
3.0125798902e+03 3.0334549013e+02 3.0152263068e+02 2.9799460866e+02 2.9662883748e+02 2.9706572397e+02 
3.0175798902e+03 3.0324699921e+02 3.0138079877e+02 2.9821459880e+02 2.9667166944e+02 2.9706245240e+02 
3.0225798902e+03 3.0336015983e+02 3.0128802830e+02 2.9836039823e+02 2.9670134577e+02 2.9706003491e+02 

我試圖跳過前兩行,然後讀取列並挑出最大值和最小值。

這是怎麼回事?

+0

您的意思是做'data.append()'而不是'data.extend( )'? – 2015-02-05 17:47:58

+0

擴展是故意的,但在將其更改爲追加後,我仍然收到相同的錯誤。 – 2015-02-05 17:49:36

+0

假設'rowdata'是'[1.0,2.5,3.0]'=,那麼'zip(* rowdata)'相當於'zip(1.0,2.5,3.0)'。這些是標量值,不能壓縮。 – 2015-02-05 17:52:43

回答

1

您需要更改column = zip(*rowdata)column = zip(*data)。還有在評論說,你應該使用append而不是extend

rowdata = map(float,fields) 
data.append(rowdata) 
column = zip(*data) 
+0

Doh。就是這樣。謝謝! – 2015-02-05 17:53:45

+0

@ sct_2015,好的,歡迎光臨! – Kasramvd 2015-02-05 17:54:24

相關問題