我有以下数据文件:
0.0 2453.4645 4906.929 7360.3935 9813.858 12267.3225 14720.787 17174.2515 19627.716 22081.1805 24534.645 26988.1095 29441.574 31895.0385 34348.503 36801.9675
以BINARY形式。
我需要将其读入8个列表a,b,c,d,e,f,g,h,每个包含3个元素,。即我需要保存在每个变量中的元素1-8,然后是9-16,依此类推。
我有以下代码:
# Python code to read binary data
from struct import *
import numpy as np
readfile = open('bigdata.dat')
readfile_data = readfile.read()
type(readfile_data)
a = len(readfile_data)
print a
e = unpack('18d',readfile_data[0:8*18])
field_names = ('a','b','c','d','e','f')
hg = dict(zip(field_names,e))
print hg
我得到的是一个带有每个字典值元素的字典:
{'a': 0.0, 'c': 4906.929, 'b': 2453.4645, 'e': 9813.858, 'd': 7360.3935, 'f': 12267.3225}
我怎样才能在Python中做到这一点(最好是2.7,但也欢迎3)?我想我必须循环 在整个列表上的这些字典字段名称,但我不知道如何..
答案 0 :(得分:0)
以列表形式获得数据后,您可以执行以下操作
from collections import defaultdict
data = [[0.0, 2453.4645, 4906.929, 7360.3935,
9813.858, 12267.3225, 14720.787,
17174.2515], [19627.716, 22081.1805,
24534.645, 26988.1095, 29441.574,
31895.0385, 34348.503, 36801.9675]]
hg = defaultdict(list)
field_names = ('a','b','c','d','e','f')
for row in data:
for field_name, datum in zip(field_names, row):
hg[field_name].append(datum)
print hg
输出
defaultdict(<type 'list'>, {'a': [0.0, 19627.716], 'c': [4906.929, 24534.645], 'b': [2453.4645, 22081.1805], 'e': [9813.858, 29441.574], 'd': [7360.3935, 26988.1095], 'f': [12267.3225, 31895.0385]})
答案 1 :(得分:0)
itertools
模块具有islice()
功能,可以帮助您:
>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> import itertools
>>> for val in itertools.islice(s, 0, None, 8):
... print val
...
a
i
q
y
>>> for val in itertools.islice(s, 1, None, 8):
... print val
...
b
j
r
z
>>> for val in itertools.islice(s, 2, None, 8):
... print val
...
c
k
s
因此,对于您的问题,您可能会这样做:
import itertools
a = [item for item in itertools.islice(e, 0, None, 8)]
b = [item for item in itertools.islice(e, 1, None, 8)]
c = [item for item in itertools.islice(e, 2, None, 8)]
等等。或者,更好的是:
columns = []
for n in range(8):
columns.append([item for item in itertools.islice(e, n, None, 8)])
希望这有帮助!
P.S。这是documentation for islice。 itertools
模块中还有很多其他有用的工具:看看吧!