我目前有一个非常无序的文件
file.txt
vfc1 3435 4556
vfc1 2334 2123
vfc1 5556 1234
vfc2 8997 5969
vfc2 4543 3343
vfc2 1232 2123
我想要做的是订购此文件,以便我文件中的所有行显示在一行上,如下所示:
file_output.txt
vfc1 1234 2123 2334 3435 4556 5556
vfc2 1232 2123 3343 4543 5969 8997
答案 0 :(得分:2)
这个怎么样?
from collections import defaultdict
d = defaultdict(list)
with open('input.txt') as f:
for line in f.readlines():
data = line.split()
d[data[0]].extend(data[1:])
with open('output.txt', 'w') as f:
for key, value in d.iteritems():
f.write(
'%(key)s %(value)s\n'
% {'key': key, 'value': " ".join(sorted(value))}
)
答案 1 :(得分:1)
也许是这样的:
d = {}
for line in file('file.txt'):
if line.strip():
sl = line.split()
if d.has_key(sl[0]):
d[sl[0]] += ' %s' % ' '.join(sl[1:])
else:
d[sl[0]] = ' '.join(sl[1:])
fd = open('file_output.txt', 'w')
for key in d:
fd.write('%s %s\n' % (key, d[key]))
fd.close()
答案 2 :(得分:0)
不是特定于python的。更像是伪代码,但这里的想法是:
' '
(空格)作为分隔符将字符串拆分为数组parts
parts[0]
== currentIndex?如果是,请将parts[1],parts[2]
添加到lastEntry
。 lastEntry
添加到targetArray
。设置currentIndex = parts[0]
。清除lastEntry
。将parts[1],parts[2]
添加到lastEntry
。 就是这样! : - )
答案 3 :(得分:0)
my_file = open('file.txt', 'r')
lines = {}
for line in my_file:
values = line.split()
lines[values[0]] = lines.get(values[0], []) + values[1:]
my_file.close()
new_file = open('output_file.txt', 'w')
for k in lines:
line = '%s %s\n' % (k, ' '.join(sorted(lines[k])))
new_file.write(line)
new_file.close()
答案 4 :(得分:0)
您还可以使用iterools.groupby
按第一列对行进行分组:
from collections import defaultdict
from itertools import chain, groupby
with open(input) as f:
data = (x.split() for x in f)
grouped = defaultdict(list)
for key, group in groupby(data, key=lambda x: x[0]):
for line in group:
grouped[key] += line[1:]
for k,v in grouped.items():
print k, ' '.join(v)