我有一系列特定格式的文本文件。例如,file.txt
如下所示,形状类似于50列字母和70行文本:
AAAAAAAAAAAA
BBBBBBBBBBBB
CCCCCCCCCCCC
DDDDDDDDDDDD
我想把下面的内容放入一个numpy数组中,并进行操作。这个数组有一定的维数。形状类似于50列字母,70行文本,例如shape(70,50)。但是,有些文本文件是“缺少字母”。有问题的文件是这样的
^{pr2}$我想检查是否有“空格”存在,并抛出一个错误。有标准的方法来处理numpy数组吗?在将文本输入数组之前还是之后?在
我可以对多个文件执行此操作吗?也就是说,如果我输入200个文件,最终结果是一个numpy数组形状的(200,70,50)
。在
对于大多数不需要的工作
numpy
。下面的代码将输入文件读入一个列表中,每个元素将是输入文件的一行(去掉尾随的换行符)。然后它创建一个长度相同的列表,每个元素都指示给定的字符串是否没有空格。如果其中任何一个是False
,那么您就有问题了,您可以按照自己的意愿来处理这个问题。否则,无空格的条目将被读入字符串类型numpy.ndarray
。在示例
^{pr2}$input.inp
:输出:
注意,最后的输出是“16字符字符串”类型,因为我们首先将list转换成数组,然后抛出不必要的部分。只需做一些小的工作,您就可以根据自己的喜好定制这个解决方案,而且您的示例似乎还建议您的输入行具有相同的长度(在这种情况下,生成的数组将具有最佳的
dtype
)。在我建议您先读取文件,检查空间,如果它通过测试,就可以存储它,以便最终构建数组。如果要丢弃无效数据,或者直接抛出一个错误,那么在数组中使用额外的指令来操作它是没有意义的。在
当遇到无效文件时,代码将打印警告。如果你真的想抛出一个错误,它将停止整个进程,并且不会构造数组。为此,只需将打印的警告消息替换为
^{pr2}$请注意,此代码假定所有文本文件具有相同的行数和列数。如果情况并非如此,请说明您希望如何处理。在
{cd1>如何在短列表中存储字符串。在
如果您有一个列表列表并将其传递给一个数组,它将为该列表创建一个2D数组。例如
在这里,列表的成员数与文件中的行数相同,子列表包含列数据。因此,如果我们得到一个列表列表,其中有每个文件的列表,当我们将其传递给数组时,我们将获得所需的维度。在您的示例中,对于每个文件包含70行和50列的200个文件,我们将得到(200,70,50)。在
当我们一次性读取一个文件的内容时,它们的格式是
'AAA\nBBB'
,那么我们如何将其转换成[['A', 'A', 'A'], ['B', 'B', 'B']]
?在使用文本行列表模拟文件:
你怎么把它加载到数组中?我们通常使用
^{pr2}$loadtxt
,但这是针对数据列的没用。在
让我们
split
在这些行上带有“空白”的行将变成包含1个以上术语的列表
所以2行有错误。在
我可以通过
list()
传递字符串,将txt
转换为每列一个字母的数组。这给np.array
一个列表列表,长度相同。行尾的空白/空白可能会导致问题。在我可以测试这个数组中的
' '
字符,方法如下:如果这些行的长度不同,那么这个
array
将不是2d,而是包含列表的1d。在正如注释中建议的那样,我可以从整个字符串中创建一个数组,并使用
view
将它们“分割”成字符。在带有“非功能”分隔符的
loadtxt
将创建一个二维数组,如下所示:然后把它分成几个字符:
相关问题 更多 >
编程相关推荐