0

我目前正在尝试从以下输入文件创建字典:

1776344_at      1779734_at  0.755332745 1.009570769 -0.497209846
1776344_at      1771911_at  0.931592828 0.830039019 2.28101445
1776344_at      1777458_at  0.746306282 0.753624146 3.709120716
...
...

该文件共有 12552 行。

我想做的是创建一个字典,其中前 2 列是键,其余列是值。我已经成功完成了,它看起来像这样:

1770449_s_at;1777263_at:0.825723773;1.188969175;-2.858979578
1772892_at;1772051_at:-0.743866602;-1.303847456;26.41464414
1777227_at;1779218_s_at:0.819554413;0.677758609;4.51390617

但事情是这样的:我在 ms-dos cmd 上运行了我的 python 脚本,生成的输出不仅与输入文件中的序列不同(即第 1 行是第 34 行),整个文件只有 739线。

有人可以告诉我发生了什么吗?跟记忆有关系吗?因为我最后一次检查我还有 305GB 的磁盘空间。

我写的脚本如下:

import sys
import os

input_file = sys.argv[1]
infile = open(input_file, 'r')

model_dict = {}
for line in infile:
    key = ';'.join(line.split('\t')[0:2]).rstrip(os.linesep)
    value = ';'.join(line.split('\t')[2:]).rstrip(os.linesep)
    print 'keys are:',key,'\n','values are:',value
    model_dict[key] = value
    print model_dict
    outfile = open('model_dict', 'w')
    for key,value in model_dict.items():
        print key,value
        outfile.write('%s:%s\n' % (key,value))

outfile.close()
4

1 回答 1

0

根据给定的信息,并且由于每个字典键都是唯一的,我怀疑您在输入文件中有生成相同键的行。这样,字典将只保存与该键关联的最后一个值。

Python 字典是一组无序的键:值对。因此,当您将其元素打印到输出文件时,不要期望保留顺序。

我在您的脚本中看到的另一个问题是打印输出文件的循环,它不应该在从输入文件读取的循环“内部”。

于 2013-09-15T17:15:27.290 回答