2017-08-03 5 views
3

を提出する書き込みリストは、私は、フォームのリストを持っている

lssample=[ [ [A,B],[C] ] ,[ [D],[E,F] ],[ [G,H],[I] ]] 

形式でファイルに

A,B : C 
D: E,F 
G,H : I 

注これを書くための最も効率的な方法は何でありますサブリストの長さは任意です。以下のコードは、リストを書式でしか書いていません(かっこ付き)。これをファイルに書き込むためのpythonの方法はありますか?

with open("output1.csv", "wb") as f: 
    writer = csv.writer(f) 
    writer.writerows(lssample) 
+1

これはcsvファイルではありません... –

答えて

6

これは単なるロール自分で自分をするために非常に単純なフォーマットのように思える作家、のようなもの:

In [2]: data = [[['A','B'], ['C']], [['D'],['E','F']], [['G','H'], ['I']]] 

In [3]: import io 

In [4]: with io.StringIO() as f: 
    ...:  for record in data: 
    ...:   left, right = map(",".join, record) 
    ...:   f.write(f"{left} : {right}\n") 
    ...:  final = f.getvalue() 
    ...: 

In [5]: print(final) 
A,B : C 
D : E,F 
G,H : I 

注、io.StringIOは簡単のために、ファイルのような働きだけで、メモリバッファです-図。

with open("output1.txt", "w") as f: 
    ... 

もちろん、final = f.getvalue()は必要ありません。また、私はPython 3.6のf-stringsを使用しています。あなたはそれを持っていない場合は、使用することができます。

f.write("{} : {}".format(left, right) 
+0

小さなインパクト提案のみ: 'for'ループの先頭でタプルをアンパックするので、' for a、b in data: 'です。 +1。 –

+0

@WillemVanOnsem良い点。 –

+1

@WillemVanOnsem実際には、私は 'map( '、'。join、record)'でアンパックを行った。 –

3

次の文字列は、(必要に応じて、コロンの前後にスペースを追加する)あなたが探しているものです。

output = "\n".join(','.join(head) + ":" + ','.join(tail) \ 
        for head, tail in lssample) 
print(output) 
#A,B:C 
#D:E,F 
#G,H:I 

だけでファイルに書き込みます。

3

あなたはまたprintと少しでこれを行うことができますjoin

fp = open('file_name','w') 
txt = '\n'.join([','.join(i)+ ' : ' + ','.join(j) for i,j in lssample]) 
fp.write(txt) 
fp.close() 

結果:,

In [10]: print txt 
A,B : C 
D : E,F 
G,H : I 
1

を使用します簡潔さのためのヘルパー関数(名前検索を減らすこともあります):

with open('output.txt', 'w') as fout: 
    fmt = ','.join 
    for fst, snd in lssample: 
     print(fmt(fst), ':', fmt(snd), file=fout) 
関連する問題