2017-02-10 13 views
0

私はcsvファイルからデータを取り込み、リストに格納し、必要な情報だけを返すデータを繰り返し処理するコードを書いています。ネストされたwhileループは1回だけ繰り返す

# Import modules 
import csv 
import datetime 
# import numpy as np 
import matplotlib.pyplot as plt 

# Time code (as slow to run) 
tin = [] 
tout = [] 
tin = datetime.datetime.now() #tic 
plt.close() 

# Assign variables 
pktime = [] 
pkey1 = [] 
pkey2 = [] 
pkey3 = [] 
pkey4 = [] 
pkey5 = [] 
pkey6 = [] 
pkeys=[pkey1, pkey2, pkey3, pkey4, pkey5, pkey6] 
delt1 = [] 
delt2 = [] 
delt3 = [] 
delt4 = [] 
delt5 = [] 
delt6 = [] 
delts=[delt1, delt2, delt3, delt4, delt5, delt6] 
pkey1full=[] 
pkey2full=[] 
pkey3full=[] 
pkey4full=[] 
pkey5full=[] 
pkey6full=[] 
pkeyfull=[pkey1full, pkey2full, pkey3full, pkey4full, pkey5full, pkey6full] 


# Read in PK weight/deltaT/time values 
with open('PKweight.csv') as pkweight: 
    red = csv.reader(pkweight) 
    for t, pk1, pk2, pk3, pk4, pk5, pk6, dt1, dt2, dt3, dt4, dt5, dt6 in red: 

     pktime.append(datetime.datetime.strptime(t,'%H:%M:%S')) 
     pkey1.append(float(pk1)) 
     pkey2.append(float(pk2)) 
     pkey3.append(float(pk3)) 
     pkey4.append(float(pk4)) 
     pkey5.append(float(pk5)) 
     pkey6.append(float(pk6)) 
     delt1.append(float(dt1)) 
     delt2.append(float(dt2)) 
     delt3.append(float(dt3)) 
     delt4.append(float(dt4)) 
     delt5.append(float(dt5)) 
     delt6.append(float(dt6)) 

#calculate the pkweight for each cell, then append it to pkey*full 

def pkweight1_calc(): 
    i=1 
    while i<=(len(pkey1)-1): 
     if pkey1[i] == 0.0 and pkey1[i-1]!=0.0: 
      pkey1full.append(pkey1[i-2]) 
     i+=1 
    pkey1full.reverse() 
    return pkey1full 
pkweight1_calc() 

を、私は、このコードは、データのセット(1-6)の各機能を完了するために、6回を書いていた、しかし私はそれを1としてすべてを持つようにしたい: 私はそれは、単一のリストのために働いていました関数。

def pkweight_calc():  
    i=1 
    for j in range(0,5): 
     while i<=(len(pkeys[j])-1): 
      if (pkeys[j][i]) == 0.0 and (pkeys[j][i-1])!=0.0: 
       pkeyfull[j].append(pkeys[j][i-2]) 
      i+=1 
     pkeyfull[j].reverse() 
pkweight_calc() 

誰もこれで私を助けることができる:私は、whileループ内のネストしたwhileループは、しかし、それだけで、jのinital値が何であっても、リストの1を返す使用して試してみましたか?前もって感謝します!! EDIT-更新インデント、申し訳ありません

+2

コードに実際にインデントされていますか?それは書かれているので無限ループです。 – khelwood

+0

また、この行 'pkey1full.append(pkey1 [i-2])'を見てください。それは 'i = 1'に対してpkey1 [-1]にアクセスしようとしていませんか? – Fallen

+0

なぜあなたは無限ループとして書くのですか?実際にはあなたが必要です –

答えて

0

助けてくれてありがとうございました。私は助けてくれる職員を見つけました。彼はなぜ必ず波平が、forループwhileループに

while i<=(len(pkeys[j])-1): 

を変更:

for i in range(2, len(pkeys[j])): 

は、それを解決しました。理由は分かりませんが、それはしました!

関連する問題