2017-02-25 10 views
-1

Okay, ich habe ein Programm, das Tupeln enthält ganze Zahlen gibt und fügt sie zu einer Liste wie folgt aus:Python 3 - Schreiben Liste Tupel von ganzen Zahlen CSV enthält

[(0,98,7), (437, 563, 128), (82, 45, 221)...] 

Ich wollte die Tupel schreiben eine Datei mit dem .WRITE() Funktion wie diese mit „Werten“, wie die Liste die Tupel in gespeichert sind:

output=open("output.txt","w") 
for v in range(len(values)): 
    print(values[v]) #so it prints each value in the shell for error check 
    output.write(values[v]) 

das erwartete Ergebnis ist eine Textdatei mit dem Inhalt wie folgt aus:

0,98,7 
437, 563, 128 
82, 45, 221 
... 

Das Problem ist, dass es sagt, es kann kein Tupel in eine Datei schreiben; es fragt nach einer Zeichenfolge. Ich habe versucht, die .join() - Funktion und die list() - Funktion zu verwenden, um zu versuchen, das Tupel zu einer Zeichenfolge oder einer Liste innerhalb der Werteliste zu ändern. Weiß jemand, wie ich dieses Problem lösen könnte? Vielen Dank.

+0

Was war der Code, den Sie mit der 'Join' verwendet haben und was war der Fehler, der es daran hinderte zu arbeiten? Beachten Sie auch, dass '' open ('output.txt', 'w') als output_file: ... 'verwendet werden sollte, da es Dateien schließt, selbst wenn ein Fehler auftritt. – darthbith

+0

1. Verwenden Sie' for v in values: '. 2. Vielleicht dieses 'output.write (str (v))'. 3. Vergessen Sie nicht, die Datei zu schließen (am Ende). – Elmex80s

+0

Danke an alle, die mir dabei geholfen haben; Ich glaube, ich habe am falschen Ort gesucht und die falschen Antworten bekommen ... Ich bin relativ vertraut mit Python und lese nie über das CSV-Modul. Vielen Dank; Die Information ist sehr nützlich! –

Antwort

2

Das ist genau das, was das csv Modul für gemacht wird:

import csv 

with open('output.txt','w',newline='') as fou: 
    cw = csv.writer(fou) 
    cw.writerows(values) 
+1

JA! '', '. Join (Zeichenfolgen) 'ist _nicht_ CSV, Rolling Ihre eigenen Serializer/Parser ist eine schreckliche Idee. Benutze das Modul. – ShadowRanger

+0

Danke, @DSM. Aktualisierte Antwort – bernie

+0

@Bernie DANKE SO VIEL !!! IHR BEIDE!!! –

0

wie Sehen, wie someones bereits die csv Weise gezeigt, hier ist es ohne ist.

s = [(0,98,7), (437, 563, 128), (82, 45, 221)] 
with open('out.txt', 'w') as f: 
    for e in s: 
     f.write('%s\n' % ','.join(str(n) for n in e)) 

Schreiben Sie einfach em in einer Schleife. Jedes Element in der Sammlung, die an Join übergeben wird, sollte eine Zeichenfolge sein. Konvertieren Sie jeden Wert, und verwenden Sie dann join, um die durch Kommas getrennten Zeilen zu erstellen.

Ergebnis

[email protected]:~$ cat out.txt 
0,98,7 
437,563,128 
82,45,221 

Hinweis Sie konsequent Leerzeichen nach dem Komma in der Ausgabe nicht. Wenn ich mein outout wie die erste Zeile machte, ohne sie. Wenn Sie wollen, ändern Sie einfach Ihre Verbindungszeichenfolge ','.join(etc...) =>', '.join(etc...)

Verwandte Themen