【问题标题】:Python load .txt as arrayPython将.txt加载为数组
【发布时间】:2020-05-03 13:53:36
【问题描述】:

只要有一个包含数据的 colors.txt 文件:

[(216, 172, 185), (222, 180, 190), (231, 191, 202), (237, 197, 206), (236, 194, 204), (227, 184, 194), (230, 188, 200), (232, 192, 203), (237, 199, 210), (245, 207, 218), (245, 207, 218)]

现在尝试在 python 中将其作为数组读取

f = open("colors.txt", "r")
data = f.read()
data2 = np.append(data)
f.close()

现在想打印第一个值,但我有一个错误

print(data2[0])

TypeError: _append_dispatcher() 缺少 1 个必需的位置 参数:'值'

【问题讨论】:

  • 您没有使用其文档中指定的np.append。你为什么在这里使用它?它应该做什么?
  • 这些数据从何而来?我强烈建议使用上下文管理器来处理文件对象。

标签: python arrays numpy file


【解决方案1】:

问题在于,当您真正想要list 时,您正在从文件中附加字符串数据。所以使用literal_eval 来安全地评估数据类型:

import numpy as np
from ast import literal_eval

with open('colors.txt') as fh:
    data = literal_eval(fh.read())

# np.array can consume a list
arr = np.array(data)

array([[216, 172, 185],
       [222, 180, 190],
       [231, 191, 202],
       [237, 197, 206],
       [236, 194, 204],
       [227, 184, 194],
       [230, 188, 200],
       [232, 192, 203],
       [237, 199, 210],
       [245, 207, 218],
       [245, 207, 218]])

您也不想使用np.append,因为这需要两个参数,您要附加到的数组和要附加的数据。你想用你从文件中读取的数据构造一个数组

【讨论】:

    【解决方案2】:

    使用 eval 方法读取文本并追加到空数组中

    import numpy
    
    data1=[]
    f = open("colors.txt", "r")
    data = f.read()
    f.close()
    
    L = eval(data)
    print(L)
    data2 = numpy.append(data1,L)
    print(data2[0])
    

    【讨论】:

    • 添加上下文/解释以避免机器人标记和删除。 (来自 LQ-Posts 评论)。
    【解决方案3】:

    您可以使用 eval 将文本表示返回为 python 类型:

    f = open("colors.txt", "r")
    data = f.read()
    data = eval(data)
    data2 = np.append(data)
    f.close()
    

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多