2016-03-31 7 views
1

私は既に一定の条件に適合しないものを取り除くためにすでにフィルタリングしている気象変数の長いリストを持っています。たとえば、すべてのデータポイントは午前11時(午後11時)と午後5時(午後17時)の間にのみ存在します。 11時から17時の間のデータは単一のイベントを表し、毎日はイベントを含んでいません。私は、どの曜日にイベントを開催したかを判断しようとしています。新しいイベントが起こっていることは、時間(HH24)の値が前の値よりも低い値のたびに発生していることを私は知っています。例えば。 16(午後5時)の値の後に11,12,13,14または15が続く場合、データが新しい日とイベントに進行したことがわかります。csvファイルを解析して相対サイズに応じて行をファイルに書き込む

書き込みしようとしているコードでは、この最後の値(17など)を含む行がファイルに書き込まれ、次の行が書き込まれます。このようにして、新しいcsvファイルには、すべてのイベントの開始時刻(およびその他の情報)と終了時刻が含まれます。私はforコマンドを使用する必要があると仮定しますが、私はこの特定の課題に対してcsvライターでこれを行う方法がわかりません。私のコードの概要は以下の通りです。#

import csv 

with open("weather_out_2000_2006_time_filtered_and_speed_filtered.csv", "rb") as input, open("X:\weatherresults\seabreezeevents.csv", "wb") as wanted: 
    reader = csv.DictReader(input, delimiter=",", skipinitialspace=True) 
    fieldnames = reader.fieldnames 
    writer_wanted = csv.DictWriter(wanted, fieldnames, delimiter=",") 
    writer_wanted.writeheader() 

    for line_number, row in enumerate(reader): 
     try: 
      if float(row["HH24"]) < #the value in the subsequent row: 
       writer_wanted.writerow(row) # and also write subsequent row 
     except: 
      print "Failed to parse line", line_number 
      print row 

私のデータファイルはこのように見えます。私はHH24の値が高い値から低い値への移行を示しているので、私の意味を理解することができます。

hd,Station Number,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Local time,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Local standard time,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Universal coordinated time,Precipitation since last (AWS) observation in mm,Quality of precipitation since last (AWS) observation value,Air Temperature in degrees Celsius,Quality of air temperature,Air temperature (1-minute maximum) in degrees Celsius,Quality of air temperature (1-minute maximum),Air temperature (1-minute minimum) in degrees Celsius,Quality of air temperature (1-minute minimum),Wet bulb temperature in degrees Celsius,Quality of Wet bulb temperature,Wet bulb temperature (1 minute maximum) in degrees Celsius,Quality of wet bulb temperature (1 minute maximum),Wet bulb temperature (1 minute minimum) in degrees Celsius,Quality of wet bulb temperature (1 minute minimum),Dew point temperature in degrees Celsius,Quality of dew point temperature,Dew point temperature (1-minute maximum) in degrees Celsius,Quality of Dew point Temperature (1-minute maximum),Dew point temperature (1 minute minimum) in degrees Celsius,Quality of Dew point Temperature (1 minute minimum),Relative humidity in percentage %,Quality of relative humidity,Relative humidity (1 minute maximum) in percentage %,Quality of relative humidity (1 minute maximum),Relative humidity (1 minute minimum) in percentage %,Quality of Relative humidity (1 minute minimum),Wind (1 minute) speed in km/h,Wind (1 minute) speed quality,Minimum wind speed (over 1 minute) in km/h,Minimum wind speed (over 1 minute) quality,Wind (1 minute) direction in degrees true,Wind (1 minute) direction quality,Standard deviation of wind (1 minute),Standard deviation of wind (1 minute) direction quality,Maximum wind gust (over 1 minute) in km/h,Maximum wind gust (over 1 minute) quality,Visibility (automatic - one minute data) in km,Quality of visibility (automatic - one minute data),Mean sea level pressure in hPa,Quality of mean sea level pressure,Station level pressure in hPa,Quality of station level pressure,QNH pressure in hPa,Quality of QNH pressure,# 
    hd,40842,2000,3,22,13,40,2000,3,22,13,40,2000,3,22,13,40,0,N,20.4,N,20.5,N,20.4,N,20.2,N,20.2,N,20.1,N,20.1,N,20.1,N,20,N,98,N,,N,,N,9,N,8,N,18,N,7,N,11,N,,N,1013.3,N,1012.2,N,1013.3,N,# 
    hd,40842,2000,3,22,13,47,2000,3,22,13,47,2000,3,22,13,47,0,N,20.5,N,20.5,N,20.5,N,20.2,N,20.2,N,20.2,N,20.1,N,20.1,N,20,N,97,N,,N,,N,4,N,0,N,56,N,75,N,5,N,,N,1013.2,N,1012.1,N,1013.2,N,# 
    hd,40842,2000,3,23,11,0,2000,3,23,11,0,2000,3,23,11,0,0,N,23.4,N,23.4,N,23.3,N,21.3,N,21.4,N,21.3,N,20.2,N,20.3,N,20.2,N,82,N,,N,,N,8,N,5,N,66,N,2,N,9,N,,N,1013.6,N,1012.5,N,1013.6,N,# 
    hd,40842,2000,3,23,11,1,2000,3,23,11,1,2000,3,23,11,1,0,N,23.4,N,23.4,N,23.4,N,21.4,N,21.4,N,21.3,N,20.3,N,20.3,N,20.2,N,82,N,,N,,N,8,N,5,N,68,N,3,N,9,N,,N,1013.6,N,1012.5,N,1013.6,N,# 
+0

入力から取得するサンプル出力csvを表示します。 – vittore

+0

私はそれがあなたが望むように動作するとは思わない。あなたは日付も見なければなりません。例えば、 16(午後5時)の値に11,12,13,14、または15が続く場合、データが新しい日とイベントに進んでいることがわかります。本当に十分ですが、11の値のあとに12と13が続く場合、新しいイベントかどうかはわかりません。なぜなら、同じ日にはそうでない場合、別の日にあります。 – Gerrat

+0

それは意味があります。それを指摘してくれてありがとう。 –

答えて

1

日付が変わるたびに行を書きたいので、比較のために日付変数を作成することをお勧めします。 は以来(

それは追跡して以前行を書き出すためにはるかに簡単だ(と私はなぜあなたが新しい日付に達しているときに決定するために動作しません「HH24」の値を比較し、私のコメントで述べました) の次の行ではなく、既に処理済みです)、これはどのように処理するかについて考えるべきです。次のような 何か(未テスト)を支援する必要があります

... 
import datetime 
prev_row = None 
for line_number, row in enumerate(reader): 
    try: 
     dt = datetime.date(year=row["Year"], month=row["Month"], day=row["day"]) 
     if prev_row is not None and dt > prev_row['dt']: 
      writer_wanted.writerow(prev_row['row']) 
      writer_wanted.writerow(row) 
     prev_row = {'row':row, 'dt':dt} 
    except: 
     print "Failed to parse line", line_number 
     print row 

EDIT:

あなたプログラムでこの行の最初の部分:

with open("weather_out_2000_2006_time_filtered_and_speed_filtered.csv", "rb") as input 

という名前.csvファイルを開きます入力のため(modeは 'rb' - docs hereです)。

同じ行の次の部分:

open("X:\weatherresults\seabreezeevents.csv", "wb") as wanted 

を出力するためのファイル(「WB」モード)と名付けられたことを開く - 上記と同じ基準を参照。

ここで、変数名inputwantedは、両方ともfile typeのオブジェクトを参照しています。

あなたのプログラムは次に、csvモジュールを使用して、コンマ区切りのテキストファイルを解析するのに役立つ特定の方法でファイルを読み取ります。その参照をreader変数に割り当てます。 同様に、変数writer_wantedcsv.DictWriterに割り当てます。wantedによって参照される出力ファイルに行を書き出すときに、書式設定に役立ちます。その後

、一度に1行で読み込まれる:あなたはより多くの詳細が必要な場合

writer_wanted.writerow(row) 

for line_number, row in enumerate(reader): 

、一度に1行がで書き出されますあなたの最善の策は、Pythonのチュートリアル(Googleはあなたの友人です)を通過することです。

+0

Gerratありがとう、確かに意味がある。この例では、元のCSVファイルをどのように読んでいるのか、どのファイルに書いているのかは分かりません。 noobの質問を許して、私はかなりpythonに新しいです。 –

+0

と同様に、上記のコードのファイルをインポートするにはどうすればよいですか?そして、どうやってCSVに書き出すのですか? –

+0

これは実際のチュートリアルサイトでも、拡張された議論の場でもありませんが、コードについてもう少し詳しく説明します。 – Gerrat

関連する問題