2016-04-03 4 views
0

Ich habe eine einfache Frage: Ich möchte nur den Inhalt einer Zeile aus einer Datei x zu greifen. Meine Datei x wie folgt aussieht:Greife nur den Inhalt einer Zeile

PointXY 
[387.93852, 200.0] 
PointXY 
[200.0, 387.93852] 
PointXY 
[200.0, 387.93852] 
PointXY 
[200.0, 353.20889] 
PointXY 
[387.93852, 200.0] 
PointXY 
[200.0, 387.93852] 
PointXY 
[200.0, 300.0] 

Mein Skript in Python wie folgt aussieht:

h = open("x.gcode", "r") 
searchlines = h.readlines() 
file = "" 

for i, line in enumerate(searchlines): 
    if "PointXY" in line: 
     P = searchlines[i+1] 
     print(P) 

I P will sein zu [200.0, 100.0] (zum Beispiel). Es gibt mir jetzt '[200.0, 100.0] \ n'. Wie kann ich das in der Zeile "P = Suchzeilen [i + 1]" einstellen?

+0

So suchen Sie es ohne die '\ n' haben? – idjaw

Antwort

2

entfernen Sie suchen die neue Zeile Zeichen aus jeder Zeile strip, die Sie bequem die verfügbaren strip Methode von str Sie verwenden können:

Wenn Sie erhalten Ihre Daten in searchlines, tun:

searchlines[i+1].strip() 

Um zu sehen, dass es tatsächlich entfernt wird, überprüfen Sie die repr:

print(repr(P)) 

Sie können sogar tun, dass repr Druck vor und nach dem strip() Anwendung, um zu sehen, was passiert, wenn diese Streifen aufrufen.

die Struktur des Textes In Anbetracht Sie haben, suchen Sie es sich um eine Liste zu machen, so, Sie konnte Verwendung loads von json dies zu tun:

json.loads(searchlines[i+1].strip()) 
+0

Danke, dass Gott die \ n loswerden, wie kann ich die '' loswerden? Ich möchte P [200.0, 100.0] haben, jetzt gibt es noch '[200.0, 100.0]' zurück. – Henry

+0

@Henry Meine Antwort wurde aktualisiert, um das bereits zu berücksichtigen. Überprüfen Sie die letzte Zeile. – idjaw

+1

Super, das funktioniert! – Henry

2

können Sie str.strip() verwenden, um die \n

for i, line in enumerate(searchlines): 
    if "PointXY" in line: 
     P = searchlines[i+1].strip() 
     print(P) 
+0

Danke, dass Gott die \ n loswerden, wie kann ich die '' loswerden? Ich möchte P [200.0, 100.0] haben, jetzt gibt es noch '[200.0, 100.0]' zurück. – Henry

+0

@Henry Sie verwenden json.loads. Überprüfe meine Antwort. – idjaw

+0

@Henry Sie können 'json.loads' in @idjaws Antwort oder uns' re' verwenden, um die gewünschte Nummer zu finden. – KIDJourney

0

, wenn Sie löschen möchten ‚\ n 'Mit dieser

nach gelesenen Daten

data = f.readlines() 

data = map(str.strip, data) 

ist aber nicht notwendig für die anderen könnten Sie verwenden diese:

import ast 
listdata = [] 
with open('lel.txt') as f: 
    data = f.readlines() 
    for x in data: 
     try: 
      if isinstance(ast.literal_eval(x), list): 
       listdata.append(eval(x)) 
     except: 
      pass 

dann für get Daten Liste:

print listdata 
>>>[[387.93852, 200.0], [200.0, 387.93852], [200.0, 387.93852], [200.0, 353.20889], [387.93852, 200.0], [200.0, 387.93852], [200.0, 300.0]] 
print listdata[0] 
>>>[387.93852, 200.0] 
print listdata [0][0] 
>>>387.93852 
+0

Die Verwendung von 'eval' sollte nicht als vorgeschlagene Antwort verwendet werden und sollte nicht allgemein verwendet werden. – idjaw

+0

Ich bin Anfänger in Python, ich möchte den Grund .... warum? – Milor123

+0

Sicher. Am besten lesen [this] (http://stackoverflow.com/a/1832957/1832539). Nachschlagen "Warum ist Eval schlechte Praxis in Python?". Tatsächlich finden Sie in vielen Sprachen Gründe, eval nicht zu verwenden. – idjaw

Verwandte Themen