将列表输出到文本文件时的格式化问题
我有一个包含多个列表的列表,长得像这样:
dupe = [['95d1543adea47e88923c3d4ad56e9f65c2b40c76', 'ron\\c', 'apa.txt'], ['95d1543adea47e88923c3d4ad56e9f65c2b40c76', 'ron\\c', 'knark.txt'], ['b5cc17d3a35877ca8b76f0b2e07497039c250696', 'ron\\a', 'apa2.txt'], ['b5cc17d3a35877ca8b76f0b2e07497039c250696', 'ron\\a', 'jude.txt']]
我用一个很简单的函数把它写入一个文件:
try:
file_name = open("dupe.txt", "w")
except IOError:
pass
for a in range (len(dupe)):
file_name.write(dupe[a][0] + " " + dupe[a][1] + " " + dupe[a][2] + "\n");
file_name.close()
文件里的输出看起来是这样的:
95d1543adea47e88923c3d4ad56e9f65c2b40c76 ron\c apa.txt
95d1543adea47e88923c3d4ad56e9f65c2b40c76 ron\c knark.txt
b5cc17d3a35877ca8b76f0b2e07497039c250696 ron\a apa2.txt
b5cc17d3a35877ca8b76f0b2e07497039c250696 ron\a jude.txt
但是,我该怎么做才能让dupe.txt文件里的输出变成这样:
95d1543adea47e88923c3d4ad56e9f65c2b40c76 ron\c apa.txt, knark.txt
b5cc17d3a35877ca8b76f0b2e07497039c250696 ron\a apa2.txt, jude.txt
5 个回答
1
我猜你上一个问题没有解决你的困扰吧?
与其把每个有重复ID和目录的列表放在不同的列表里,不如把列表中的文件元素做成一个子列表,里面包含所有具有相同ID和目录的文件。
这样,重复的部分看起来会是这样的:
dupe = [['95d1543adea47e88923c3d4ad56e9f65c2b40c76', 'ron\\c', ['apa.txt','knark.txt']],
['b5cc17d3a35877ca8b76f0b2e07497039c250696', 'ron\\a', ['apa2.txt','jude.txt']]
然后你的打印循环可以类似于:
for i in dupe:
print i[0], i[1],
for j in i[2]
print j,
print
1
from collections import defaultdict
dupe = [
['95d1543adea47e88923c3d4ad56e9f65c2b40c76', 'ron\\c', 'apa.txt'],
['95d1543adea47e88923c3d4ad56e9f65c2b40c76', 'ron\\c', 'knark.txt'],
['b5cc17d3a35877ca8b76f0b2e07497039c250696', 'ron\\a', 'apa2.txt'],
['b5cc17d3a35877ca8b76f0b2e07497039c250696', 'ron\\a', 'jude.txt'],
]
with open("dupe.txt", "w") as f:
data = defaultdict(list)
for hash, dir, fn in dupe:
data[(hash, dir)].append(fn)
for hash_dir, fns in data.items():
f.write("{0[0]} {0[1]} {1}\n".format(hash_dir, ', '.join(fns)))
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
2
首先,按照“键”来分组这些行(每个数组的前两个元素就是“键”):
dupedict = {}
for a, b, c in dupe:
dupedict.setdefault((a,b),[]).append(c)
然后把结果打印出来:
for key, values in dupedict.iteritems():
print ' '.join(key), ', '.join(values)