Python 将文件输入到多个矩阵

Python 将文件输入到多个矩阵,python,list,file,matrix,readline,Python,List,File,Matrix,Readline,我知道有相关的线索,但我已经搜索过了,没有一条能帮我解决问题 我有一个带有方形矩阵的输入文本文件,如下所示: 1 2 3 4.56 789 * 1011121314 1516171819 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 现在可能会有更多的矩阵,它们之间都有一个* 我想分离矩阵(不使用numpy!),然后使用列表中的列表来处理它们(我想列表理解可能有用),所有条目都是整数。第一个矩阵将如下所示,[[1,2,3],[4,5,6],[7,8,9

我知道有相关的线索,但我已经搜索过了,没有一条能帮我解决问题

我有一个带有方形矩阵的输入文本文件,如下所示:

1 2 3
4.56
789
*
1011121314
1516171819
20 21 22 23 24
25 26 27 28 29
30 31 32 33 34

现在可能会有更多的矩阵,它们之间都有一个
*

我想分离矩阵(不使用numpy!),然后使用列表中的列表来处理它们(我想列表理解可能有用),所有条目都是整数。第一个矩阵将如下所示,
[[1,2,3],[4,5,6],[7,8,9]
,第二个矩阵将是
[[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29],[31,31,32,33,34]

我的计划是在它们自己的列表条目中分离矩阵,然后(利用矩阵是正方形的事实,因此可以很容易地确定一个列表条目应该包含多少个整数)使用一些列表理解将字符串更改为整数。但我一开始就被困在这里

matrix = open('input.txt','r').read()
matrix = matrix.replace('\n',' ')
list = matrix.split('* ')
现在,如果我
打印列表
我会得到
['123456789','10111214151617181921222324252727282934334']

问题是,我现在只能处理两个字符串,而不是整数列表


有什么建议吗?

既然已经有了字符串,请在空格中拆分每个字符串,并将每个小字符串转换为整数。之后,您可以将每个字符串列表转换为方形“矩阵”(列表列表)

另外一点:不要将
list
用作变量名。与内置的
列表
类型冲突。在这段代码中,我使用了名称
mylist

newlist = [[int(nstr) for nstr in v.split()] for v in mylist]
# Now convert each list of strings to a square "matrix" (list of lists)
但是,请注意@Selcuk在其评论中给出的方法是解决总体问题的更好方法。虽然将整个文件读入内存并在星号上拆分,然后将每行拆分为整数会更容易一些。这将导致更简单的代码,但更大的内存使用

mat_list = [[[int(num_str) for num_str in line.split()] for line in inner_mat.split('\n')] for inner_mat in open('input_mat.txt','r').read().split('\n*\n')]

[1,2,3],[4,5,6],[7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29],[30,31,32,33,34]。

而不是立即读取文件;试着逐行阅读,使用
作为分隔符拆分每一行,将它们附加到列表列表中(一个列表用于保存单个矩阵,第三个列表用于保存多个矩阵),并在该行仅为
*
字符时初始化一个新列表。冲洗并重复。我正在努力解决这个问题,谢谢你的提示。我不会将它用于非常大的文件,所以这不应该是一个太多的考虑。更简单的代码是我的首选,因为我对python非常陌生。行末尾的\n给了我一些麻烦。@Math初学者
.split()
将为您处理额外的
\n
。这是我正在寻找的输出,但您的代码没有为我提供。您能解释一下使用的代码吗?将输入读取为一个字符串,在\n*\n上拆分,得到内部矩阵,然后在换行符上拆分每个内部矩阵\n,每个内部矩阵有一行,然后在空格上拆分每行并将其转换为整数