2017-02-06 10 views
1

現在、リストをcsvファイルに書き込んで、1行にx個の値があるようにしています(値の数はxの倍数です)。私はしばらくの間、解決策を探していましたが、私は主題に近づけるためにいくつかの方法を見つけましたが、私が望むようにコードを作成することはできません。txtファイルの各行にx個の値を書き込む

これは私の仮定的な例です... 私はリストを圧縮しようとしました。それは、リストごとに2つの値を書き込むためのリストです。しかし、使用はありません。

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

が、私のコーディングでは、それは...このよう

record1 = ['Chocolates', '3', 'Novels', '14', 'Pens', '4', 'Smiles', '78'] 
に見える:これは私が.txtファイルでの私のリストは次のようになりたい...何が起こるか

です

私はそれを圧縮するためにこれを使用:

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) 

しかし、それはtxtファイルに次のようになります

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

私も

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

...異なったファイルにリストを書き込むしようとしました。しかし、次のように表示されます:私は上だ場合、私は知らない

"['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']" 

私のアプローチが正しいかどうかを判断する。私は外観がリストの外観に依存していると考えられましたが、私はそれをファイルに書き込む方法に依存していると信じ始めています。

ありがとうございます。うまくいけば私の説明は明らかだった。

+0

'>>> RECORD1 = [ 'チョコレート'、 '3'、「小説(0、len(record1)、2)]内のiについては、レコード1 [i:i + 2] ['チョコレート'、 '3']、['小説'、 '14']、['ペンズ'、 '4']、['スマイル'、 '78'] ' – Natecat

+0

学ぶために 'csv'モデルでは、あなたのケースは直接書くだけです。一般的な再グループ化(パーティショニング)については、http://stackoverflow.com/questions/3992735/python-generator-that-groups-another-iterable-into-groups-of-n – Alan

答えて

1

は、ありませんwriterow():第2のケースで

writer.writerows(records) 

それは次のようになります。

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

デモ

は、Pythonシェルにこれを貼り付けてみてください:このコードbox.txtを実行した後

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) 

が含ま:

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

後者については確かですか?ファイル内の各文字は、それらの間にカンマを持つように書かれています。 –

+0

@ Tamz.001:あなたが 'record1:'のレコードにしようとすると起こります。 'record1'とN個のグループのレコードである' records'を混同しないでください。 – mhawke

+0

ええ、私はそれをあなたが言った方法でやったが、まだ起こった。しかし、あなたの助けをありがとう。 –

0

あなたは間違った方法を呼び出しました。次のいずれかである必要があります。

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

を参照してください。ありがとうございます。それ。 チョコレート、3 HIII、14本の ペン、4人の 笑顔、78 ** 4回 –

+0

私たちはさまざまなソリューションについて話していると思う:唯一の問題は今、値がテキストファイルに次のように表示されること、です。私の答えはあなたの_最初のスニペットを指しています。ファイルをどうやって開いたのですか? Excelで? – DyZ

+0

いいえ、私はテキストファイル(メモ帳)を使用しています。そして、申し訳ありませんが、私の説明が十分にはっきりしていない場合、私が示した2つの試みは、同じ目的のためでした:私のテキストファイルの各行にx(このシナリオでは2)の値を印刷する –

0
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]) 

参考:あなたはwriterows()を使用しなければならない最初のケースでhttps://docs.python.org/2/library/csv.html#csv.writer

関連する問題