2017-02-06 1 views
1

Ich versuche derzeit, eine Liste in eine CSV-Datei zu schreiben, so dass es X-Werte pro Zeile gibt (mit der Anzahl der Werte ein Vielfaches von x ist). Ich suche schon seit einiger Zeit nach einer Lösung und ich habe eine Reihe von Möglichkeiten gefunden, mich dem Thema zu nähern, aber ich kann den Code nicht dazu bringen, das zu tun, was ich will.Schreiben x Anzahl der Werte in jeder Zeile in TXT-Datei

Dies ist mein hypothetisches Beispiel ... Ich habe versucht, die Liste zip, damit ist eine Liste von Listen in einem Versuch, es pro Zeile 2 Werte schreiben zu haben. Es gibt jedoch keinen Nutzen; das ist, was passiert ...

ich meine Liste in der TXT-Datei wie folgt aussehen wollen:

Chocolates,3 
Novels,14 
Pens,4 
Smiles,78 

aber in meiner Codierung, sieht es so aus ...

record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78'] 

ich habe diese es zip:

records = [record1[i:i+2] for i in range(0, len(record1), 2)] 

prize = open("box.txt","w") 
writer = csv.writer(prize) 
writer.writerow(records) 

Allerdings sieht es so in der txt-Datei

"['Chocolates', '3']","['4', '14']","['Pens', '4']","['Smiles', '78']" 

ich auch versucht habe, anders die Liste in die Datei zu schreiben ...

prize = open("box.txt","w") 
writer = csv.writer(prize) 
for record in records: 
    writer.writerow(records) 
prize.close() 

Aber es scheint wie folgt aus:

"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']" 
"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']" 
"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']" 
"['Chocolates', '3']","['hiii', '14']","['Pens', '4']","['Smiles', '78']" 

Ich weiß nicht, ob ich auf bin die richtige Spur oder wenn mein Ansatz richtig ist. Ich dachte, dass das Aussehen von der Erscheinung der Liste abhing, aber ich fange an zu glauben, dass es davon abhängt, wie ich es in die Datei schreibe.

Vielen Dank für das Lesen. Hoffentlich war meine Erklärung klar, sorry wenn es nicht war.

+0

'>>> record1 = [ 'Schokolade', '3',‚Romane ',' 14 ',' Stifte ',' 4 ',' Lächeln ',' 78 '] >>> [record1 [i: i + 2] für i im Bereich (0, len (record1), 2)] [['Chocolates', '3'], ['Romane', '14'], ['Pens', '4'], ['Smiles', '78']] ' – Natecat

+0

Es sei denn du versuchst es nur lernen das 'csv' Modell, wäre Ihr Fall einfacher, einfach direkt zu schreiben. Für allgemeine Umgruppierung (dh, Partitionierung), siehe http://stackoverflow.com/questions/3992735/python-generator-that-groups-another-iterable-into-groups-of-n – Alan

Antwort

1

Im ersten Fall sollten Sie writerows() verwenden, nicht writerow():

writer.writerows(records) 

Im zweiten Fall sollte es sein:

for record in records: 
    writer.writerow(record) # record, not records 

Demo

Try Einfügen dieser in eine Python-Shell:

import csv 

record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78'] 
records = [record1[i:i+2] for i in range(0, len(record1), 2)] 

with open("box.txt", "w") as prize: 
    writer = csv.writer(prize) 
    writer.writerows(records) 

Nach dem Ausführen von Code box.txt enthält:

 
Chocolates,3 
Novels,14 
Pens,4 
Smiles,78 
+0

Sind Sie sich über letzteres sicher? Jedes Zeichen in meiner Datei wird geschrieben, um ein Komma zwischen ihnen zu haben, z. c, h, o, c, o, l, a, t, e, s, 3 etc ... –

+0

@ Tamz.001: Das passiert, wenn Sie 'für Record in record1:' versuchen. Verwechseln Sie nicht "record1" mit "records", was die Liste "gruppiert nach N" ist. – mhawke

+0

Ja, ich habe es getan, wie du gesagt hast, aber das ist immer noch passiert. Vielen Dank für Ihre Hilfe. –

0

Sie haben eine falsche Methode aufgerufen. Muss sein:

prize = open("box.csv","w") 
writer = csv.writer(prize) 
writer.writerows(records) 
+0

Oh danke - ich habe nicht realisiert Das. Das einzige Problem ist, dass jetzt die Werte wie dies in der Textdatei angezeigt: Pralinen, 3 hiii, 14 Pens, 4 Smiles, 78 ** viermal –

+0

Ich denke, wir über verschiedene Lösungen sprechen. Meine Antwort bezieht sich auf Ihr _erstes_ Schnipsel. Und wie hast du die Datei geöffnet? In Excel? – DyZ

+0

Nein, ich benutze eine Textdatei (Notizblock). Tut mir leid, wenn meine Erklärung nicht klar genug war, aber die beiden Versuche, die ich zeigte, waren für das gleiche Ziel: x (in diesem hypothetischen Szenario - 2) Werte in jeder Zeile meiner Textdatei –

0

Ich hoffe euch gefällt es.

import csv 


record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78'] 
with open('box.csv', 'wb') as csvfile: 
    writer = csv.writer(csvfile) 
    for item, count in zip(record1[::2], record1[1::2]): 
     writer.writerow([item, count]) 

Referenz: https://docs.python.org/2/library/csv.html#csv.writer

Verwandte Themen