Python 将输入从文本读入二维数组

Python 将输入从文本读入二维数组,python,arrays,matrix,multidimensional-array,text-files,Python,Arrays,Matrix,Multidimensional Array,Text Files,我有一个txt文件,它有金字塔格式的数字,如: 5 10 7 1 3 12 我想把它们放到一个二维数组中(就像一个正则矩阵)。我试过了。但是我想给所有缺失的位置加上0(零)。比如: 5,0,0 10,7,0 1,3,12 为了做到这一点,我必须知道最后一行的长度,以创建合适的二维阵列 如何实现这一点?最后一行的元素数是您将其反转为读取时第一行的元素数 line.rstrip() 你试过这一行吗?最后一行的元素数是当你将它反转读取时第一行的元素数 line.rst

我有一个txt文件,它有金字塔格式的数字,如:

      5
    10 7
  1  3  12
我想把它们放到一个二维数组中(就像一个正则矩阵)。我试过了。但是我想给所有缺失的位置加上0(零)。比如:

5,0,0
10,7,0
1,3,12
为了做到这一点,我必须知道最后一行的长度,以创建合适的二维阵列


如何实现这一点?

最后一行的元素数是您将其反转为读取时第一行的元素数

line.rstrip()

你试过这一行吗?

最后一行的元素数是当你将它反转读取时第一行的元素数

line.rstrip()

你试过这个吗?

为了做你想做的事情,没有办法避免读取整个文件,因为行可以有不同的长度,这意味着你无法计算任何行开始的偏移量(当然,第一行除外):


为了做您想做的事情,无法避免读取整个文件,因为所有行的长度都可能不同,这意味着您无法计算其中任何一行开始的偏移量(当然,第一行除外):


如果要读取文件以创建二维数组,则应将查找最后一行的长度合并到创建数组中,以便不必读取文件两次

我假设我们事先不知道有多少行(这意味着我们不知道矩阵的每一边有多长)。我还假设您的文件名为
file.txt

我们需要的是一个列表的运行列表。一旦我们读取了整个文件,我们就可以返回并添加尾随的零。Python字符串“
split()
方法在这里很有用,因为在没有参数的情况下,该方法使用空格作为分隔符。下面是一个简单的文件示例:

>>> with open('file.txt') as file:
...     for line in file:
...         print(line.split())
... 
['5']
['10', '7']
['1', '3', '12']
以下代码将每个列表保存为名为
行的列表的元素:

rows = []
with open('file.txt') as file:
    for line in file:
        rows.append(line.split())
现在剩下的就是检查最后一行的长度,在每个列表的末尾添加零,然后以您想要的漂亮格式打印它。以下是完整的解决方案:

rows = []
with open('file.txt') as file:
    for line in file:
        rows.append(line.split())
size = len(rows[-1])
for i in range(len(rows)):
    rows[i] = rows[i] + ['0'] * (size - len(rows[i]))
for row in rows:
    print(','.join(row))

如果要读取文件以创建二维数组,则应将查找最后一行的长度合并到创建数组中,以便不必读取文件两次

我假设我们事先不知道有多少行(这意味着我们不知道矩阵的每一边有多长)。我还假设您的文件名为
file.txt

我们需要的是一个列表的运行列表。一旦我们读取了整个文件,我们就可以返回并添加尾随的零。Python字符串“
split()
方法在这里很有用,因为在没有参数的情况下,该方法使用空格作为分隔符。下面是一个简单的文件示例:

>>> with open('file.txt') as file:
...     for line in file:
...         print(line.split())
... 
['5']
['10', '7']
['1', '3', '12']
以下代码将每个列表保存为名为
行的列表的元素:

rows = []
with open('file.txt') as file:
    for line in file:
        rows.append(line.split())
现在剩下的就是检查最后一行的长度,在每个列表的末尾添加零,然后以您想要的漂亮格式打印它。以下是完整的解决方案:

rows = []
with open('file.txt') as file:
    for line in file:
        rows.append(line.split())
size = len(rows[-1])
for i in range(len(rows)):
    rows[i] = rows[i] + ['0'] * (size - len(rows[i]))
for row in rows:
    print(','.join(row))

输入文件中是否有如您所示的前导空格字符?是的,我有。数据就像一个金字塔。但是我想把它转换成一个矩阵(右边的空白处填满了零)输入文件中是否有如你所示的前导空格字符?是的,我有。数据就像一个金字塔。但是我想把它转换成一个矩阵(右边的空白处填满了零),如果你在寻找一个完整的解决方案来创建2D数组,看看你是否在寻找一个完整的解决方案来创建2D数组,谢谢你,我接受了。size=len(行[-1])的作用是什么?我不明白这些行[-1]。。。为什么-1?如果
n
是一个整数,
rows[n]
返回
n
行的第th个元素。这就是所谓的。它也从末尾开始工作,使用负数<代码>行[-1]
获取
行的最后一个元素
len()
然后获取
行的最后一个元素的长度
。谢谢,我接受了它。size=len(行[-1])的作用是什么?我不明白这些行[-1]。。。为什么-1?如果
n
是一个整数,
rows[n]
返回
n
行的第th个元素。这就是所谓的。它也从末尾开始工作,使用负数<代码>行[-1]
获取
行的最后一个元素
len()
然后获取
行的最后一个元素的长度。