为了账号安全,请及时绑定邮箱和手机立即绑定

将数字读入网格

将数字读入网格

江户川乱折腾 2022-10-25 16:14:43
我有一个数字网格,看起来像这样,并且持续了一段时间。08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 0849 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 0081 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 6552 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 9122 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 8024 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 5032 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 7067 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 2124 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 7221 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 文件。祝大家最好的日子:)
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

一些注意事项:

  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.]])


查看完整回答
反对 回复 2022-10-25
?
MYYA

TA贡献1868条经验 获得超4个赞

您可以单独使用Numpy,而无需求助于Pandas。执行此操作的代码是:

tbl = np.fromfile('Input.txt', sep=' ', dtype='i4').reshape(-1, 20)

无需自行删除前导零。Numpy为你做这件事。


查看完整回答
反对 回复 2022-10-25
?
手掌心

TA贡献1942条经验 获得超3个赞

你可以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]]


查看完整回答
反对 回复 2022-10-25
  • 3 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信