将数字读入网格

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


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 文件。


祝大家最好的日子:)


江户川乱折腾
浏览 87回答 3
3回答

一只甜甜圈

一些注意事项:确保您使用open()的是关键字with。参考这里。在处理文件对象时,最好使用 with 关键字。优点是文件在其套件完成后正确关闭,即使在某个时候引发了异常。您可以使用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 npfile = 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.]])

MYYA

您可以单独使用Numpy,而无需求助于Pandas。执行此操作的代码是:tbl = np.fromfile('Input.txt', sep=' ', dtype='i4').reshape(-1, 20)无需自行删除前导零。Numpy为你做这件事。

手掌心

你可以pd.read_csv()这样使用:my_array = pd.read_csv('test.txt', sep=' ', engine='python', header=None).values产量:[[ 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]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python