擅长:python、mysql、java
<p>你可以试试这个</p>
<pre><code>data = open('testfile.dat').read().split('\n')
def newcmp(x,y):
rv = cmp(len(x[1]), len(y[1]))
if rv: return rv
else: return cmp(x[0], y[0]) # alphabetical
persons = {}
attributes = {}
nAttrs = 0
for l in data:
pname , pvals = line.split('\t')[:2]
for atName, atVal in (x.split('=') for x in pvals.psplit(';'))
try:
persons[pName][attributes[atName]] = atVal
except KeyError:
attributes[aName] = nAttrs
persons[pName][attributes[atName]] = atVal
nAttr += 1
headers = ['NAME'] + range(nAttrs)
for x in attributes.keys(): headers[attributes[x]+1] = x
values = []
for pName, pVals in sorted(persons.items(), cmp=newcmp)
if len(pVals) < nAttrs: pVals += [0 for x in xrange(nAttrs - len(pVals))]
values.append('\t'.join(('%d'%x for x in pVals)))
outfh = open('outputfile.dat', 'w')
outfh.write('%s\n%s\n'%('\t'.join(headers), '\n'.join(values)))
outfh.close()
</code></pre>