2016-06-02 2 views
0

So sieht meine txt-Datei wie folgt:Ich brauche Tupel von x zu erhalten, y-Koordinaten aus einer Datei und fügen Sie ihn in einer Liste

68,125 
113,69 
65,86 
108,149 
152,53 
78,90 
54,160 
20,137 
107,90 
48,12 

Ich brauche diese Dateien zu lesen und es dann in eine Liste setzen von X- und Y-Koordinatentupeln.

sollte Meine ausgegeben werden

[(68, 125), (113, 69), (65, 86), (108, 149), (152, 53), (78, 90), (54, 160), (20, 137), (107, 90), (48, 12)] 

Ich stecke, wie dies zu tun. Ich muss nur Basic Python verwenden.

Edit:

Mein Versuch, so weit ist diese

numbers = [] 
input_file = open(filename,'r') 
numbers_list = input_file.readlines() 
input_file.close() 
for i in numbers_list: 
    numbers += [i] 
return numbers 

Mein Ausgang kehrt als dies:

['68,125\n', '113,69\n', '65,86\n', '108,149\n', '152,53\n', '78,90\n', '54,160\n', '20,137\n', '107,90\n', '48,12\n'] 

Wie kann ich von der '\ n' loszuwerden, und auch, wie kann ich jedes einzelne Element in der Liste in ein Tupel setzen. Vielen Dank. Mein Fehler, dass ich meinen Versuch nicht hinzugefügt habe.

+0

Was Sie versucht haben? – miradulo

+0

Entschuldigung, ich hätte das tun sollen –

Antwort

2

auf der Grundlage all den Inhalt Lesen neuer Zeile aus Datei. Streifen Sie die Zeilenumbrüche von jeder Zeichenfolge ab. Dann konvertieren Sie jeden String in Tupel durch Teilung auf Komma. Im Folgenden finden Sie den Code mit einer Textdateieingabe, die den Inhalt wie gewünscht und das erwartete Ergebnis enthält.

import sys 
def test(filename): 
    f = open(filename) 
    lines = f.readlines() 
    lines = [item.rstrip("\n") for item in lines] 
    newList = list() 
    for item in lines: 
      item = item.split(",") 
      item = tuple(int(items) for items in item) 
      newList.append(item)     
    f.close() 
    print newList 

if __name__ == "__main__": 
    test(sys.argv[1]) 

O/P: 
[email protected]:myExperiments$ python test.py /export/home/techie/myExperiments/test.txt 
[(68, 125), (113, 69), (65, 86), (108, 149), (152, 53), (78, 90), (54, 160), (20, 137), (107, 90), (48, 12)] 

Hoffe, das wird helfen. :-)

+0

Wie kann ich die Anführungszeichen ("'") mit dieser Methode loswerden. –

+0

Ok. Sie wollen Tupel von ganzen Zahlen ich schätze ?? – sagar

+0

Ja, ich sollte das spezifiziert haben. –

2

Hier sind 3 und 2 Zeile antwortet:

with open("my_txt_file") as f: 
    lines = f.readlines() 
result = [tuple(int(s) for s in line.strip().split(",")) for line in lines] 

besser, als Ilja Everilä darauf hingewiesen, "Datei öffnen als Iterator":

with open("my_txt_file") as f: 
    result = [tuple(int(s) for s in line.strip().split(",")) for line in f] 
+1

Sie sollten 'readlines()' fast immer vermeiden, wenn Sie Zeilen aus einer Datei lesen und sofort verarbeiten müssen. Verwenden Sie einfach die offene Datei als Iterator. Sie erstellen eine unnötige Kopie der Liste für das Listenverständnis, da Sie die Liste * Zeilen * darin nicht mutieren. 'split() [0]' ist seltsam, meinst du 'strip()'? –

+0

@ IljaEverilä Vielen Dank für Anregungen! Bearbeitet die Antwort –

1

Als Ihre Datei enthält Komma ganzzahlige Werte getrennt, können Sie das Modul csv es zu handhaben verwenden:

import csv 

with open(filename, newline='') as f: 
    reader = csv.reader(f) 
    numbers = [tuple(map(int, row)) for row in reader] 
Verwandte Themen