<p>我建议您先读取文件,检查空间,如果它通过测试,就可以存储它,以便最终构建数组。如果要丢弃无效数据,或者直接抛出一个错误,那么在数组中使用额外的指令来操作它是没有意义的。在</p>
<pre><code>input_files = ['input0.txt', 'input1.txt', 'input2.txt']
valid_data = []
for i in input_files:
with open(i, 'r') as f:
data = f.read()
if ' ' not in data:
valid_data.append([list(s) for s in data.split('\n')])
else:
print 'Invalid data in file {}. File will be ignored.'.format(i)
result = np.array(valid_data)
</code></pre>
<p>当遇到无效文件时,代码将打印警告。如果你真的想抛出一个错误,它将停止整个进程,并且不会构造数组。为此,只需将打印的警告消息替换为</p>
^{pr2}$
<p>请注意,此代码假定所有文本文件具有相同的行数和列数。如果情况并非如此,请说明您希望如何处理。在</p>
<hr/>
<p>{cd1>如何在短列表中存储字符串。在</p>
<p>如果您有一个列表列表并将其传递给一个数组,它将为该列表创建一个2D数组。例如</p>
<pre><code>>>> data = [['A', 'A', 'A'], ['B', 'B', 'B']]
>>> np.array(data)
array([['A', 'A', 'A'],
['B', 'B', 'B']],
dtype='|S1')
</code></pre>
<p>在这里,列表的成员数与文件中的行数相同,子列表包含列数据。因此,如果我们得到一个列表列表,其中有每个文件的列表,当我们将其传递给数组时,我们将获得所需的维度。在您的示例中,对于每个文件包含70行和50列的200个文件,我们将得到(200,70,50)。在</p>
<p>当我们一次性读取一个文件的内容时,它们的格式是<code>'AAA\nBBB'</code>,那么我们如何将其转换成<code>[['A', 'A', 'A'], ['B', 'B', 'B']]</code>?在</p>
<pre><code>>>> data = 'AAA\nBBB'
>>> data.split('\n')
['AAA', 'BBB']
>>> [list(s) for s in data.split('\n')]
[['A', 'A', 'A'], ['B', 'B', 'B']]
</code></pre>