【问题标题】:Too much data in a Python dictionary?Python 字典中的数据太多?
【发布时间】:2012-12-02 22:29:40
【问题描述】:

我有一个大约 10,000 行的文本文件。
典型的线条如下所示:

'1 2/1/2011 9:30,ZQZ,200.02,B,500'

如果我运行#1,我可以遍历整个文件,i 将计算文件中的总行数。但是,如果我创建一个字典,在遍历文件时记录每一行中的数据(如 #2 所示),我将完成大约一半。我无法弄清楚为什么会这样。 10,000 行数据是否可能太大而无法包含在字典中?我怎样才能确定这一点? #1 TheFile = 打开(文件名) TheFile.next()

i = 0
for l in TheFile:
   i += 1
   print i

#2
TheFile = open(file_name)
TheFile.next()
thedata = {}
i = 0
for l in TheFile:
   i += 1
   print i
   this_line = TheFile.next()
   the_info = this_line.split(',')
   the_ticker = the_info[1]
   #print type(the_info[1])
   #print this_line
   if the_ticker not in thedata.keys():
      thedata[the_ticker] = {}

   thedata[the_ticker]['trade'+ str(len(thedata[the_ticker]) + 1)] =
   {'the_trade_number':len(thedata[the_ticker]),
    'theTime':the_info[0],
    'thePrice':float(the_info[2]),
    'theTransaction':the_info[3],
    'theQuantity':int(the_info[4])}

问题是#2没有给我任何错误,这就是为什么我无法弄清楚问题是什么

【问题讨论】:

  • 哦,顺便说一句,我在运行文件时没有收到任何错误,这就是我无法确定问题的原因。
  • 好的,谢谢山姆。我是这个网站的新手。虽然不完全确定我为什么这样做,但我想你知道你在说什么。
  • 仅 10,000 行,将占用将近 700KB 的内存。然后是dict 的开销。即使假设这使您达到 1MB,这也不是很多内存。我们真的需要看看你是如何创建这个dict
  • 感谢@inspectorG4dget。我将尝试以不太令人困惑的方式发布我的代码。还有,你怎么知道10000行会占用700MB内存?
  • sys.getsizeof('1 2/1/2011 9:30,ZQZ,200.02,B,500') 返回69 字节。从那里开始的简单代数

标签: python file dictionary loops


【解决方案1】:

您的问题就在运行#2 中:

for l in TheFile:
   i += 1
   print i
   this_line = TheFile.next()

l 已经有当前行,然后您使用TheFile.next() 获得另一行。我敢打赌,如果你将this_line = TheFile.next() 更改为this_line = l,你会得到你期望的结果。

【讨论】:

  • 我打赌你是对的。这就解释了为什么它会在中途停止。谢谢
  • 为了清楚起见,OP 的代码不会“中途停止”。它贯穿整个文件并跳过文件中的每一行
  • @Sam Mussmann,仍然想知道为什么“接受这个答案”如此重要?
  • 想知道一件事。一切都按照我现在的预期工作。我已将大约 10,000 行从文本文件加载到嵌入式字典结构中。如果我通过 IDLE 访问其中一个包含键中的值(将其打印到屏幕上),我会返回一个嵌入式字典,其中包含大约 600 个键,每个键包含 6 个键,每个键都有一个对应的值。当我将此信息打印到控制台时,计算机变得非常卡顿(无法滚动)。这是什么原因?我该如何避免呢?因为我想在未来使用更大的数据集
  • 我的猜测是您正在超载 IDLE 显示文本的能力。如果不了解您的情况,我真的不能说更多。我想您可以通过 (a) 一次仅打印部分字典或 (b) 将字典打印到文件并以这种方式检查字典来解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多