在python中将txt文件写入2d数组

时间:2017-11-06 11:41:41

标签: arrays python-3.x numpy

我是python的新手,我尝试将此文件读入二维数组。

xxxxxxxxxxxxxxxxxxxx
x                  x
x       xxx        x
x       x xxxxx    x
x   s     x        x
x       x x  xxxxxxx
x  xx xxxxx        x
x      x      g    x
x      x           x
xxxxxxxxxxxxxxxxxxxx

我尝试用numpy库来做这件事,但它似乎没有用。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

您没有指定要创建的数组类型。

这里有一些演示采用低级方法(假设更多)和更高级别的方法,遵循Jeronimo的评论。

低级方法使用ASCII定义(可能依赖于创建此文件的编辑器/程序)。

ASCII:

  • 10:新行
  • 13:回车
  • 120:x
  • ...

代码:

import numpy as np
np.set_printoptions(linewidth=120)

""" Hacky low-level approach """
with open('input_file.txt', 'rb') as f:
    mat = np.fromfile(f, dtype=np.uint8)
    col_len = np.where(mat != 120)[0][0]  # assumes:
                                          # - constant row-len
                                          # - full # first line
    mat = mat[np.logical_and(mat != 10,  mat != 13)].reshape(-1,col_len)

    print(mat)
    print(mat.view('c'))

""" Recommended """
with open('input_file.txt', 'r') as f:
    mat = np.array([list(row[:-1]) for row in f.readlines()])
    # -1 for removing new-line
    print(mat)

输出:

[[120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120]
 [120  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32  32 120]
 [120  32  32  32  32  32  32  32 120 120 120  32  32  32  32  32  32  32  32 120]
 [120  32  32  32  32  32  32  32 120  32 120 120 120 120 120  32  32  32  32 120]
 [120  32  32  32 115  32  32  32  32  32 120  32  32  32  32  32  32  32  32 120]
 [120  32  32  32  32  32  32  32 120  32 120  32  32 120 120 120 120 120 120 120]
 [120  32  32 120 120  32 120 120 120 120 120  32  32  32  32  32  32  32  32 120]
 [120  32  32  32  32  32  32 120  32  32  32  32  32  32 103  32  32  32  32 120]
 [120  32  32  32  32  32  32 120  32  32  32  32  32  32  32  32  32  32  32 120]
 [120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120]]
[[b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x']
 [b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x']
 [b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x' b'x' b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x']
 [b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x' b' ' b'x' b'x' b'x' b'x' b'x' b' ' b' ' b' ' b' ' b'x']
 [b'x' b' ' b' ' b' ' b's' b' ' b' ' b' ' b' ' b' ' b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x']
 [b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x' b' ' b'x' b' ' b' ' b'x' b'x' b'x' b'x' b'x' b'x' b'x']
 [b'x' b' ' b' ' b'x' b'x' b' ' b'x' b'x' b'x' b'x' b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x']
 [b'x' b' ' b' ' b' ' b' ' b' ' b' ' b'x' b' ' b' ' b' ' b' ' b' ' b' ' b'g' b' ' b' ' b' ' b' ' b'x']
 [b'x' b' ' b' ' b' ' b' ' b' ' b' ' b'x' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b' ' b'x']
 [b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x' b'x']]
[['x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x']
 ['x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x']
 ['x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x' 'x' 'x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x']
 ['x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x' ' ' 'x' 'x' 'x' 'x' 'x' ' ' ' ' ' ' ' ' 'x']
 ['x' ' ' ' ' ' ' 's' ' ' ' ' ' ' ' ' ' ' 'x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x']
 ['x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x' ' ' 'x' ' ' ' ' 'x' 'x' 'x' 'x' 'x' 'x' 'x']
 ['x' ' ' ' ' 'x' 'x' ' ' 'x' 'x' 'x' 'x' 'x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x']
 ['x' ' ' ' ' ' ' ' ' ' ' ' ' 'x' ' ' ' ' ' ' ' ' ' ' ' ' 'g' ' ' ' ' ' ' ' ' 'x']
 ['x' ' ' ' ' ' ' ' ' ' ' ' ' 'x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'x']
 ['x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x' 'x']]