python停止在数据集中间工作

时间:2013-09-10 05:19:35

标签: python matplotlib

我写了一个脚本来读取数据并将数据绘制到图表中。我有三个输入文件

  • wells.csv:我想创建图表的观察井列表

    1201

    1202

    ...

  • well_summary_table.csv:包含每口井的信息(例如参考海拔,水深)

    Bore_Name Ref_elev

    1201 20

  • data.csv:包含每个孔的观察数据(例如pH,温度)

    RowId Bore_Name深度pH

    1 1201 2 7

并非well.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()

它适用于我的井列表的一半以上然后停止而不给我任何错误消息。我不知道发生了什么事。任何人都可以帮我解决这个问题吗?对不起,如果这是一个明显的问题。我是新手。

非常感谢,

1 个答案:

答案 0 :(得分: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]