1

データを読み取ってグラフにプロットするスクリプトを作成しました。3 つの入力ファイルがあります

  • wells.csv: グラフを作成したい観測井戸一覧

    1201

    1202

    ...

  • well_summary_table.csv: 各井戸の情報が含まれています (参照標高、水深など)

    Bore_Name Ref_elev

    1201 20

  • data.csv: 各ウェルの観測データ (pH、Temp など) が含まれています。

    RowId Bore_Name 深さ pH

    1 1201 2 7

wells.csv のすべてのウェルにプロットするデータがあるわけではありません

私のスクリプトは次のとおりです

well_name_list = []
new_depth_list =[]
pH_list = []
from pylab import *
infile = open("wells.csv",'r')
for line in infile:
    line=line.strip('\n')
    well=line
    if not well in well_name_list:
        well_name_list.append(well)
infile.close()
for well in well_name_list:
    infile1 = open("well_summary_table.csv",'r')
    infile2 = open("data.csv",'r')
    for line in infile1:
        line = line.rstrip()
        if not line.startswith('Bore_Name'):
            words = line.split(',')
            well_name1 = words[0]
            if well_name1 == well:
                ref_elev = words[1]
    for line in infile2:
        if not line.startswith("RowId"):
            line = line.strip('\n')
            words = line.split(',')
            well_name2 = words[1]
            if well_name2 == well:
                depth = words[2]
                new_depth = float(ref_elev) - float(depth)
                pH = words[3]
                new_depth_list.append(float(new_depth))
                pH_list.append(float(pH))
                fig.plt.figure(figsize = (2,2.7), facecolor='white')
                plt.axis([0,8,0,60])
                plt.plot(pH_list, new_depth_list, linestyle='', marker = 'o')
                plt.savefig(well+'.png')
    new_depth_list = []
    pH_list = []
infile1.close()
infile2.close()

ウェル リストの半分以上で動作し、エラー メッセージが表示されずに停止します。何が起こっているのかわかりません。誰でもその問題で私を助けることができますか? 当たり前の質問でしたらすみません。私は初心者です。

どうもありがとう、

4

1 に答える 1

2

@tcaswell は、潜在的な問題を発見しました。ファイルを閉じておらずinfile1infile2開くたびに、ファイル内のウェルの数に応じて、少なくとも多くの開いているファイル ハンドルが浮かんでいwells.csvます。Python の一部のバージョンでは、これが問題を引き起こす可能性がありますが、これが唯一の問題ではない可能性があります。いくつかのテスト データ ファイルがなければ、これを言うのは困難です。ファイルの先頭へのシークに問題がある可能性があります。次のウェルに移動すると先頭に戻ります。これにより、これまで経験してきたようにプログラムが実行される可能性がありますが、他の何かが原因である可能性もあります。withを使用して開いているファイルのスコープを管理することにより、このような問題を回避する必要があります。

また、辞書を使用して井戸の名前とデータを結び付け、プロットを行う前にすべてのデータを事前に読み取る必要があります。これにより、データ セットをどのように構築したか、どこに問題があるかを正確に確認できます。

私はまた、以下のいくつかの文体の提案を行いました. これは明らかに不完全ですが、アイデアが得られることを願っています!

import csv
from pylab import * #imports should always go before declarations
well_details = {} #empty dict

with open('wells.csv','r') as well_file:
    well_reader = csv.reader(well_file, delimiter=',')
    for row in well_reader:
        well_name = row[0]
        if not well_details.has_key(well_name):
            well_details[well_name] = {} #dict to store pH, depth, ref_elev

with open('well_summary_table.csv','r') as elev_file:
    elev_reader = csv.reader(elev_file, delimiter=',')
    for row in elev_reader:
        well_name = row[0]
        if well_details.has_key(well_name):
            well_details[well_name]['elev_ref'] = row[1] 
于 2013-09-10T05:46:29.473 に答える