Python загрузить .txt как массив - PullRequest
0 голосов
/ 16 января 2020

Просто имейте файл 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 обязательный позиционный аргумент: 'values'

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Проблема в том, что вы добавляете строковые данные из вашего файла, когда вы действительно хотите 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, так как для этого требуется два аргумента, добавляемый массив и данные для добавления. Вы хотите создать массив из данных, которые вы прочитали из файла

0 голосов
/ 16 января 2020

используйте метод 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])
0 голосов
/ 16 января 2020

Вы можете использовать eval для оценки текстового представления обратно в тип python:

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