我有一个这样的文件:
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)
但是这段代码不会向输出文件写任何内容。我做错了什么?
答案 0 :(得分:1)
使用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