1

サンプル サイト ファイル タイプとのみ互換性のあるキャリブレーション ソフトウェア PEST 内のユーティリティを使用しています。このユーティリティを使用してモデルを調整したいのですが、モデルの出力が非常に異なる形式 (CSV) になっています。SSF はタブで区切られており、サンプル サイト ID、日付 (MM/DD/YYYY)、時刻、ストリームフローの 4 つの主要なデータ列のみが含まれています。

SSF ファイルの例:

134 01/01/1980 00:00:00 34
134 01/02/1980 00:00:00 30
134 01/03/1980 00:00:00 28
134 01/04/1980 00:00:00 38

私の水文モデルからの出力は、日付 (YYYYMMDD)、シミュレートされた流量 (Qsim)、観測された流量 (Qobs)、温度、降水量、実際の蒸発量、潜在的蒸発量、および積雪水量を含む CSV ファイルに書き込まれます。

モデル出力の例:

134
Date, Qsim, Qobs, Temp, Precip, AET, PET, SWE
19800101, 34, 31, 11, 21, 3.4, 4.0, 0
19800102, 30, 30, 11, 15, 3.0, 4.4, 0
19800103, 28, 25, 12, 0, 3.1, 4.0, 0
19800104, 38, 45, 8, 30, 0.5, 3.8, 0

したがって、変換を行うために次のことを行うことにしました。

  1. サイト ID を含む列 0 を追加します (csv ファイルの行 0)
  2. csv ファイルの行 0 と行 1 を削除します
  3. csv ファイルの行 2 ~ 7 を削除します。
  4. 時間の列を追加します (この場合、各行の列 2 に「00:00:00」が必要です)
  5. 日付を YYYYMMDD から MM/DD/YYYY に再フォーマットします
  6. ファイルをタブ区切りで書く

私は間違いなくPythonの初心者で、これまでに書いたコードは次のとおりです。

import csv
HBVout = csv.reader(open('C:\\ENVpest\\Output\\Results.csv', 'rb'))
HBVout.next()
newSSF = csv.writer(open('SSF1.txt', 'wb+'), delimiter='\t')

for cline in HBVout:
    new_line = [val for col, val in enumerate(cline) if col not in (2,3,4,5,6,7)]
    newSSF.writerow(new_line)

最初の行をスキップし、不要な列を削除して、タブ区切りファイルとして書き直すことができます。ファイルに列を追加したり、日付を再フォーマットしたりする際に、何か助けていただければ幸いです。SOや他のサイトで他の質問を精査しましたが、まだ運がありません。

4

2 に答える 2

1

datetime日付の再フォーマットは、次のような組み込みモジュールを使用して非常に簡単に行うことができます。

from datetime import datetime
d = datetime.strptime("19800508", "%Y%m%d")  # convert your string to a 
                                             # datetime object
s = d.strftime("%d/%m/%Y")  # gives the string "08/05/1980"

確かに、このモジュールは使い方が少しわかりにくいです。使用する前に必ずドキュメントを調べなければなりませんが、非常に強力です。日付変換の処理は、手動で行う必要があるものではありません。

モジュールの経験はあまりありませんがcsv、正しい方向に進んでいると思います。

于 2013-10-16T01:56:18.297 に答える