[英]Using itertools.groupby
我有一个像这样的文件:
1 abc
1 def
2 ghi
3 jkl
3 mno
3 pqr
并希望从中生成这样的文件:
abc;def
jkl;mno
jkl;pqr
mno;pqr
我有以下代码:
with open('input.txt') as f1:
with open("output.csv", "wb") as f2:
cw = csv.writer(f2, delimiter=";")
for l in itertools.groupby((l.split() for l in f1), lambda x: x[0]):
grouped = set(x[1] for x in l[1]) # set avoids duplicate rows
for c in itertools.combinations(grouped, 2):
cw.writerow(c)
但是此代码不会将任何内容写入输出文件。 我究竟做错了什么?
使用csv.writer插入;
两个字符串之间是严重的过度杀伤力。 删除该代码后,您的代码即可工作。 另外,出于开发和发布的目的,请使用可迭代的行而不是外部文件作为源,并使用print
而不是write
来进行输出。
import itertools
f1 = '''\
1 abc
1 def
2 ghi
3 jkl
3 mno
3 pqr
'''.splitlines()
for l in itertools.groupby((l.split() for l in f1), lambda x: x[0]):
grouped = set(x[1] for x in l[1]) # set avoids duplicate rows
for c in itertools.combinations(grouped, 2):
print('%s;%s' % c)
版画
abc;def
pqr;mno
pqr;jkl
mno;jkl
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.