2017-08-03 24 views
3

我有形式的列表寫作列表文件

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

什麼是寫到一個文件的形式

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

注意的最有效的方法是,子列表的長度是任意的。下面的代碼只會以列表的形式寫入列表(使用括號)。有沒有把它寫入文件的pythonic方式?

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-字符串。如果你沒有,你可以使用:

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

只有一個很小的重要提議:tuple在'for'循環的頭部解包,所以'a,b在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

使用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

您還可以print和一點點做到這一點爲了簡潔(這也恰好減少了名稱查找):幫助函數:

with open('output.txt', 'w') as fout: 
    fmt = ','.join 
    for fst, snd in lssample: 
     print(fmt(fst), ':', fmt(snd), file=fout)