2016-03-26 19 views
0

ich aus txt-Datei mit dem nächsten Vektor lesen müssen:lesen Vektor aus txt-Datei in Python

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

Ich brauche in Variable x diesen Vektor setzen, ich brauche, wenn ich

setzen
print x [2] 

Python zeigen Sie mir nur 232

Im mit

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

Vorschläge?

+0

Was ist der genaue Inhalt (geben Sie einige Beispielzeilen) der Datei? Hat es nur eine Zeile mit diesem Vektor oder viele Zeilen mit einem Vektor in jeder Zeile? Wenn es viele Zeilen sind, was willst du damit machen? – CaptSolo

+0

Welche Fehlermeldung haben Sie erhalten? Könnte der Dateiname in der Anweisung 'open' falsch geschrieben sein? Außerdem müssen Sie Strings explizit in Zahlen konvertieren. – Paul

+0

ist ein Programm, das eine Textdatei verschlüsselt, und speichern Sie es in einem TXT, und ein anderes Programm liest und entschlüsselt, mit öffentlichen und privaten Schlüsseln, senden Sie mir den Fehler Traceback (zuletzt letzten Anruf): Datei "descifrador. py ", Zeile 36, in < module> Druck verschlüsselten Text [2] Indexerror: Listenindex außerhalb des zulässigen Bereichs ich habe mehr Möglichkeiten versucht, die Datei zu lesen –

Antwort

0

Es sieht wie eine Liste langer Ganzzahlen aus. So wenn Sie wirklich den Ursprung dieser Datei vertrauen Sie so etwas wie verwenden:

>>> 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 

Könnte so etwas sein:

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

* "Also wenn du der Quelle dieser Datei wirklich vertraust (...)" ... und wenn nicht? – jDo

+0

@jDo verwenden Sie 'ast.literal_eval' wie in meinem Vorschlag :) – timgeb

+0

@timgeb Gut zu wissen :) – jDo

1

Da es ein bisschen schwer ist, ohne zu antworten zu wissen, was Sie sind versuchen zu tun, lass mich dich jetzt auf ast.literal_eval zeigen. ast.literal_eval ist die sichere Version von eval, die literale Python-Strings, Zahlen, Tupel, Listen, Wörterbücher, True, False und None auswerten kann.

Hier ist eine Demo, wie Sie es verwenden würden.

Demo-Datei input.txt:

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

Lesen der Zeilen als Listen, Druck jeder Liste und sein drittes Element:

>>> 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 wenn x eine Liste ist und das Rück Wahr oder Falsch macht gleich etwas,

eval() 'linestr' realen Wert

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