将列表输出到文本文件时的格式化问题

1 投票
5 回答
557 浏览
提问于 2025-04-15 12:29

我有一个包含多个列表的列表,长得像这样:

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)

撰写回答