我在文件夹中有几个文本文件,所有文本文件都以数字形式存在,每个文件由3个空格分隔。没有换行符。我想取数字,将它们按顺序排列在一个numpy数组中,然后将其重新整形为240 x 240阵列。 (我在每个文件中都有正确数量的数据点。)之后,我希望它以图形方式显示我的数组,然后对下一个文件执行相同操作。但是,我的尝试不断给出我的错误:
"'unicodeescape' codec can't decode bytes in position 10-11: malformed \N character escape."
到目前为止我的代码是:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([])
import glob, os
os.chdir("/mydirectory")
for file in glob.glob("*.txt"):
for line in file:
numbers = line.split(' ')
for number in numbers:
a.np.append([number])
b = a.reshape(240,240)
plt.imshow(b)
a = np.array([])
答案 0 :(得分:2)
听起来像是一个读取其中一个文件的数字。我建议先做一个
lines = file.readlines()
并确保线条看起来正确。您可能还想添加strip
In [244]: [int(x) for x in '121 342 123\n'.strip().split(' ')]
Out[244]: [121, 342, 123]
但是这种循环结构也很糟糕。这是对np.append
a = np.array([])
....
for number in numbers:
a.np.append([number])
In [245]: a=np.array([])
In [246]: a.np.append(['123'])
...
AttributeError: 'numpy.ndarray' object has no attribute 'np'
In [247]: a.append(['123'])
...
AttributeError: 'numpy.ndarray' object has no attribute 'append'
In [248]: np.append(a,['123'])
Out[248]:
array(['123'],
dtype='<U32')
In [249]: a
Out[249]: array([], dtype=float64)
np.append
返回一个新数组;它不会改变a
inplace。
您想要在列表(或列表列表)中收集值,或者至少将整数列表传递给np.array
:
In [250]: np.array([int(x) for x in '121 342 123\n'.strip().split(' ')])
Out[250]: array([121, 342, 123])