2016-03-26 5 views
0

мне нужно читать текстовый файл следующего вектора:чтение вектора из текстового файла в Python

[177L, 193L, 232L, 184L, 200L] 

мне нужно поместить в переменном х этом векторе, мне нужно, когда я ставлю

print x [2] 

питона только покажите мне 232

Im пытается с

f = open ('achive.txt', 'r') 
x=[line.split(',') for line in f.readlines()] 

предложения?

+0

Каково точное содержание (укажите некоторые строки примера) файла? Имеет ли она только одну строку с этим вектором или много строк с вектором в каждой строке? Если это много строк, то что вы хотите с ними делать? – CaptSolo

+0

Какое сообщение об ошибке вы получили? Могло ли имя файла быть написано с ошибкой в ​​'открытом' сообщении? Кроме того, вам нужно явно преобразовать строки в числа. – Paul

+0

- это программа, которая шифрует текстовый файл и сохраняет его в txt, а другая программа читает и декодирует, используя общедоступные и закрытые ключи. Отправьте мне сообщение об ошибке: Traceback (последний последний звонок): Файл «descifrador. ру ", строка 36, в < module> печати зашифрованного [2.] IndexError: индекс списка из диапазона Я попробовал несколько способов, чтобы прочитать файл –

ответ

0

Он выглядит как список длинных целых чисел. Так что, если вы действительно доверяете происхождение этого файла вы могли бы использовать что-то вроде:

>>> x = eval('[177L, 193L, 232L, 184L, 200L]') 
>>> x 
[177L, 193L, 232L, 184L, 200L] 
>>> x[0] 
177L 
>>> x 
[177L, 193L, 232L, 184L, 200L] 
>>> x[2] 
232L 

Может быть что-то вроде этого:

vectors = [] 
with open('archive.txt', 'r') as arch: 
    for line in arch: 
     vectors.append(eval(line.rstrip())) 
+1

* "Итак, если вы действительно доверяете источнику этого файла (...)" * ... а если нет? – jDo

+0

@jДо тогда вы используете 'ast.literal_eval', как в моем предложении :) – timgeb

+0

@timgeb Полезно знать :) – jDo

1

Поскольку это немного трудно ответить, не зная, что вы пытаясь сделать, позвольте мне просто указать вам на ast.literal_eval. ast.literal_eval - безопасная версия eval, которая может оценивать буквенные строки, числа, кортежи, списки, словари, цифры, True, False и None.

А вот демо, как вы его используете.

Демо-файл input.txt:

[177L, 193L, 232L, 184L, 200L] 
[178L, 194L, 233L, 185L, 201L] 

Чтение строки, как списки, печать каждого списка и его третий элемент:

>>> from ast import literal_eval 
>>> with open('input.txt') as inp: 
...  for line in inp: 
...   vec = literal_eval(line) 
...   print vec, vec[2] 
... 
[177L, 193L, 232L, 184L, 200L] 232 
[178L, 194L, 233L, 185L, 201L] 233 
0

isinstance Evalue если х является список и вернуться Верно или неверно ,

Eval() делает что-то так 'linestr' к реальной стоимости

myfile = open('file.txt', 'r') 
data = myfile.readlines() 
for x in data: 
    if isinstance(eval(x), list): 
     vector=eval(x) # you must use append if need add more list 
print vector[2] 
232 

#if you use append, must ['line number']['value number'] 
#if you have multiples arrays in lines, Example: 
data = myfile.readlines() 
vector = [] 
for x in data: 
    if isinstance(eval(x),list): 
     vector.append(eval(x)) 
print vector[0][2] 
232 
print vector[1][3] 
4442 
Смежные вопросы