首页 > 解决方案 > 将数字读入网格

问题描述

我有一个数字网格,看起来像这样,并且持续了一段时间。

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95

我将此网格保存在一个 .txt 文件中,并将其分配给一个文件变量,如下所示:

grid = open("grid.txt"  )

print(grid.readlines())

grid.close()

当我打印出网格的内容时grid.readlines()弹出一些问题:首先,它被保存为一个长字符串列表(即每一行都是一个列表条目,其次,\n每个列表条目的末尾都有换行符。最后, 要将这些数据转换成网格一样的numpy数组,数字不能以零开头。即第一行第二列中的02应该是2。

我对 numpy 很陌生。有什么方法可以将这些数据转换为一个 numpy 数组,这样可以节省我在代码中手动实现编辑版本的所有繁琐工作?我知道的唯一 python 读取可能性是 csv 或 excel 文件。

祝大家最好的日子:)

标签: pythonnumpy

解决方案


一些注意事项:

  1. 确保您使用open()的是关键字with。参考这里

在处理文件对象时,最好使用 with 关键字。优点是文件在其套件完成后正确关闭,即使在某个时候引发了异常。

  1. 您可以使用str.splitlines()来实现这一点。

with open('file.txt') as f:
    lines = f.read().splitlines()

print(lines)

输出:

['08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08', '49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00', '81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65', '52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91', '22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80', '24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50', '32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70', '67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21', '24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72', '21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95']

import numpy as np

file = np.loadtxt('file.txt')
print(file)
array([[ 8.,  2., 22., 97., 38., 15.,  0., 40.,  0., 75.,  4.,  5.,  7.,
        78., 52., 12., 50., 77., 91.,  8.],
       [49., 49., 99., 40., 17., 81., 18., 57., 60., 87., 17., 40., 98.,
        43., 69., 48.,  4., 56., 62.,  0.],
       [81., 49., 31., 73., 55., 79., 14., 29., 93., 71., 40., 67., 53.,
        88., 30.,  3., 49., 13., 36., 65.],
       [52., 70., 95., 23.,  4., 60., 11., 42., 69., 24., 68., 56.,  1.,
        32., 56., 71., 37.,  2., 36., 91.],
       [22., 31., 16., 71., 51., 67., 63., 89., 41., 92., 36., 54., 22.,
        40., 40., 28., 66., 33., 13., 80.],
       [24., 47., 32., 60., 99.,  3., 45.,  2., 44., 75., 33., 53., 78.,
        36., 84., 20., 35., 17., 12., 50.],
       [32., 98., 81., 28., 64., 23., 67., 10., 26., 38., 40., 67., 59.,
        54., 70., 66., 18., 38., 64., 70.],
       [67., 26., 20., 68.,  2., 62., 12., 20., 95., 63., 94., 39., 63.,
         8., 40., 91., 66., 49., 94., 21.],
       [24., 55., 58.,  5., 66., 73., 99., 26., 97., 17., 78., 78., 96.,
        83., 14., 88., 34., 89., 63., 72.],
       [21., 36., 23.,  9., 75.,  0., 76., 44., 20., 45., 35., 14.,  0.,
        61., 33., 97., 34., 31., 33., 95.]])

推荐阅读