繁体   English   中英

使用itertools.groupby

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM