我需要将文本文件中的值读入数组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()
答案 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
)。一旦你将其重新定义为其他内容,之前的定义就消失了。