首页 > 解决方案 > 如果随机写入,我该如何安排这个 3D 数组数据

问题描述

我有一个用电的数据,它的排列如下房间时序1 时序2。时序3 时序4 时序5 时序6 1 34.5。22.1. 34.2 0 45 0 2 42.1 31.2 4.1 0 21 1 以此类推。

它被保存为 .txt 文件。我正在尝试将数据导入 python 并找到每个房间的最小值和最大值以及平均值。然后找出每个房间的最大电量和最小电量。我唯一的困难是我不知道如何排列我的数据,我可以将其列在列表中,而无需将数字本身放入列表中,例如 room1= [ 34.5, 22.1, 34.2, 0, 45, 0] . 我不想那样做。顺便说一下,这是一个我从未使用过的 3D 数组。有人可以帮我安排我的数据吗?我可以在不使用上面列出的方法的情况下找到最小值、最大值和平均值吗?

标签: pythonarrayspython-2.73d

解决方案


我假设您的数据是单个文件中由空格分隔的单个字符串。

这应该在内存中逐部分加载数据处理它并将其转储到文件中,您将在其中有一个房间及其每行的 X 时间间隔。

input_filename = "./input.txt"
output_filename = "./output.txt"
entries = []
rooms = []
time_intervals = 6
buff = ""
max_rooms_on_mem = 1

def flush_rooms(rooms): 
  with open(output_filename, 'a') as fo:
    for room in rooms:
        fo.write(' '.join([str(x) for x in room]))
        fo.write('\n')
    fo.close()

with open(input_filename) as fi:
  while True:
    c = fi.read(1)
    if not c:
      print("End of file")
      break
    if c != " ":
      buff += c
    else: 
      entries.append(float(buff))
      buff = ""

    if len(entries) == time_intervals:
      rooms.append(entries)
      entries = []

    if len(rooms) == max_rooms_on_mem:
      flush_rooms(rooms)
      rooms = []
  fi.close()

flush_rooms(rooms)

您的输入文件应如下所示...

34.5 22.1 34.2 0 45 0 2 42.1 31.2 4.1 0 21 1

你的输出文件看起来像这样......

34.5 22.1 34.2 0.0 45.0 0.0
2.0 42.1 31.2 4.1 0.0 21.0

您可以使用time_intervals来确定一个房间应该有多少时间间隔。并且您可以使用max_rooms_on_mem来确定在下一次刷新之前应该保留多少个房间...这样您就不会超载您的内存。

如果您只想使用rooms内存中的所有内容,您可以设置max_rooms_on_mem=-1结果永远不会被刷新。

否则,您可以使用以线表示房间的输出文件。

我希望这可以帮助你


推荐阅读