提示输入和程序内声明之间奇怪的python差异?

时间:2017-11-25 12:33:04

标签: python

我有一个python(v2.7.14)程序来读取目录中的所有文件,然后在一个图上绘制这些文件中的某些数据列。我还使用plt.text()标记每个相应的行,使用最后的x值和每个数据集中的第10个到最后的y值。只要我使用子程序来提示要读取哪个目录,这一切都有效,但是如果我手动将其插入到代码中(如下面注释掉的那样),它会在没有显示文本的情况下进行图形化。发生了什么事?

graph with labels, running this code as is

graph without, running with dire= './templates'

import numpy as np
import matplotlib.pyplot as plt
import glob
import os
import sys


input_direct = raw_input

def get_dir(prompt):
    while True:
    direct_name = input_direct(prompt)
    direct_name = os.path.join(os.getcwd(), direct_name)
    if os.path.isdir(direct_name):
        return direct_name
    else:
        print("try again with a real directory")


def files_in_dir(dir_name, file_spec="*.dat"):
    return glob.glob(os.path.join(dir_name, file_spec))

def file_iter(files):
    for fname in files:
    with open(fname) as inf:
        yield fname, inf.read()


dire   = get_dir("enter directory: ")
#dire= './templates'
files = files_in_dir(dire, "*.dat")
files.sort(reverse=True)
content = [np.loadtxt(x, unpack=True) for x in files]
for i in range(len(files)):
    label=files[i][43:-4]
    plt.plot(content[i][0], (content[i][1]/np.sum(content[i][1])+float(i)/2000))
    plt.text(content[i][0][-1], (content[i][1][-10]/np.sum(content[i][1])+float(i)/2000),label)

plt.show()

0 个答案:

没有答案