编写任意长度的文件列表

时间:2017-08-03 18:39:54

标签: python

我有一份表单

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)

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

您正在寻找以下字符串(如果需要,在冒号周围添加空格):

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

只需将其写入文件即可。

答案 2 :(得分: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

答案 3 :(得分:1)

你也可以使用print和一个小帮助函数来实现这一点(为了简洁起见,这也会减少名称查找):

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