读取多个文件和数组

时间:2013-02-05 17:22:17

标签: python

我需要将文本文件中的值读入数组Z.这只使用单个文件ChiTableSingle工作正常,但是当我尝试使用多个文件时,它会失败。它似乎是正确读取行,并产生Z,但是将z [0]作为[],然后我得到错误,设置一个带有序列的数组元素。

这是我目前的代码:

rootdir='C:\users\documents\ChiGrid'
fileNameTemplate = r'C:\users\documents\ContourPlots\Plot{0:02d}.png'

for subdir,dirs,files in os.walk(rootdir):
    for count, file in enumerate(files):

        fh=open(os.path.join(subdir,file),'r')
        #fh = open( "ChiTableSingle.txt" );

        print 'file is '+ str(file)

        Z = []
        for line in fh.readlines():
            y = [value for value in line.split()]
            Z.append( y )

        print Z[0][0]
        fh.close()

        plt.figure() # Create a new figure window

        Temp=open('TempValues.txt','r')
        lineTemp=Temp.readlines()
        for i in range(0, len(lineTemp)):
            lineTemp[i]=[float(lineTemp[i])]

        Grav=open('GravValues2.txt','r')
        lineGrav=Grav.readlines()
        for i in range(0, len(lineGrav)):
            lineGrav[i]=[float(lineGrav[i])]

        X,Y = np.meshgrid(lineTemp, lineGrav) # Create 2-D grid xlist,ylist values

        plt.contour(X, Y, Z,[1,2,3], colors = 'k', linestyles = 'solid')
        plt.savefig(fileNameTemplate.format(count), format='png')
        plt.clf()

1 个答案:

答案 0 :(得分:0)

我注意到的第一件事是你的列表理解y = [value for ...]只会返回一个字符串列表(来自split()函数),因此你需要将它们转换为数字格式在尝试绘制之前有一点。

此外,如果您正在读取的文件只是以空格分隔的数字表,则应考虑使用numpy.loadtxt(fh),因为它负责拆分和类型转换并返回2-d {{1 }}。如果行以常规python注释字符开头(例如numpy.array),您还可以添加它将忽略的注释文本。

只是另一个想法,我会小心使用与python方法相同的变量名(例如在这种情况下的单词# this line is a comment and will be ignored)。一旦你将其重新定义为其他内容,之前的定义就消失了。