2017-03-01 24 views
0

私はPython 3.5を使用してディレクトリとサブディレクトリを移動し、csvファイルにアクセスし、それらのファイルのデータで配列を埋めます。コードが遭遇した最初のcsvファイルは次のようになります。私が持っているPython:複数のCSVファイルからリストにデータを読み取る

csv data file

コードは以下の通りです:

import matplotlib.pyplot as plt 
import numpy as np 
import os, csv, datetime, time, glob 

gpheight = [] 
RH = [] 
dewpt = [] 
temp = [] 
windspd = [] 
winddir = [] 

dirpath, dirnames, filenames = next(os.walk('/strm1/serino/DATA')) 

count2 = 0 
for dirname in dirnames: 
    if len(dirname) >= 8: 
     try: 
      dt = datetime.datetime.strptime(dirname[:8], '%m%d%Y') 
      csv_folder = os.path.join(dirpath, dirname) 
      for csv_file2 in glob.glob(os.path.join(csv_folder, 'figs', '0*.csv')): 
       if os.stat(csv_file2).st_size == 0: 
        continue 
       #create new arrays for each case 
       gpheight.append([]) 
       RH.append([]) 
       temp.append([]) 
       dewpt.append([]) 
       windspd.append([]) 
       winddir.append([]) 
       with open(csv_file2, newline='') as f2_input: 
        csv_input2 = csv.reader(f2_input,delimiter=' ') 
        for j,row2 in enumerate(csv_input2): 
         if j == 0: 
          continue #skip header row 
         #fill arrays created above 
         windspd[count2].append(float(row2[5])) 
         winddir[count2].append(float(row2[6])) 
         gpheight[count2].append(float(row2[1])) 
         RH[count2].append(float(row2[4])) 
         temp[count2].append(float(row2[2])) 
         dewpt[count2].append(float(row2[3])) 
       count2 = count2 + 1 
     except ValueError as e: 
      pass 

私はそれがそれぞれの新しいCSVファイルのための新しい配列を作成するために設定しています。 Iは、第三の(温度)カラム、

for n in range(0,len(temp)): 
    print(temp[0][n]) 

それは部分的にしかデータの列を印刷する印刷するときしかし、:また

-70.949997 
-68.149994 
-60.449997 
-63.649994 
-57.449997 
-51.049988 
-45.349991 
-40.249985 
-35.549988 
-31.249985 
-27.149994 
-24.549988 
-22.149994 
-19.449997 
-16.349976 
-13.25 
-11.049988 
-8.949982 
-6.75 
-4.449982 
-2.25 
-0.049988 

を、私は、関連する問題は、私は単に行うときことであると信じ

print(temp) 

それが強調表示されたセクションとfull temp

を印刷しますこの1つのcsvファイルに属するセクションであり、したがって1つの配列に存在するはずです。また、そこにはいけない、追加の空の配列が最後にあります。

同じことをしますが異なるcsvファイルを使用し、期待どおりに動作し、各ファイルのデータを空の配列を持たない新しい配列に分けるコードセクションを表示しています(表示していません)。私は助けていただきありがとうございます!

+0

forループでlen(temp)をlen(temp [0])に変更することで少なくとも最初の問題を解決できます:-P –

+0

ありがとう、@AbhishekJebaraj、少し助けてくれてありがとう!通常、多次元配列で作業するのは難しいです。 – ChelleS

+0

問題が見つかりましたが、後で回答を提供する時間がかかります。 – ChelleS

答えて

0

問題は私のtrypassの使用でした。私の基準に合ったファイルはすべて満たされていましたが、それらのファイルの中には内容がどのように読み取られたかに問題があり、コードの後半でエラーが発生しました。 trypassを使用する場合は、コードブロックで発生する可能性のある例外を安全に渡すことができます。そうしないと、後で問題が発生する可能性があります。あなたがそれを渡さなければ、あなたはまだエラーを得るかもしれませんが、それを無視するのではなく、それを適切に修正するように強制します。

関連する問題