从文件中提取数据和信号
Data and signal extraction from a file
在我开始之前,我在这里和 Python 都只是初学者,我正在从事类似从文件中提取数据,然后从我需要生成信号的数据中提取数据的工作数据。我不知道如何准确解释它,但我会尽力解释问题,然后就可以了。我得到了一个文本文件,如:
12 0011
15 001a
20 111e
32 8877
50 00f3
56 1000
我能够读取文件并将它们放入字典中:
def dictionary(filename):
d = {}
f = open(filename,'r')
for lines in f:
line = lines.split(' ',1)
line[1] = line[1].replace('\n','')
d[line[0]] = line[1]
f.close()
for k in sorted(d.keys()):
print 'Keys:', k, '-> Values:', d[k]
return d
那么第二部分,它涉及到文本文件,其中第一列代表时间,第二列代表数据。这意味着在时间 = 15s 时,数据为 001a 直到时间 = 20s,数据变为 111e。数据继续相同 (111e) 直到时间 = 32s,此时数据再次变为 8877。同样的过程还在继续。我被要求在 time = 15s 到 time = 60s 的时间内以 1s 的间隔提取产生的输出。问题是我不知道做这部分的确切方法。我不知道如何转到下一个键。我试过 enumerate(d)
但它一直弹出 AttributeError。我也试过 d.iteritems().next()
但它进入了无限循环。这是我的代码:
def output(d):
a = 0
keys = sorted(d.keys())
while a <= 45:
time = a + 15
for k in keys:
if time == k:
sig = d[k]
else:
while time != k:
k = d.iteritems().next()[0]
print 'Time:', time, '-> Signal:' sig
a += 1
谁能帮帮我?非常感谢。
编辑:为了更好地理解,预期输出如下:
Time: 15s -> Signal: 001a
Time: 16s -> Signal: 001a
Time: 17s -> Signal: 001a
Time: 18s -> Signal: 001a
Time: 19s -> Signal: 001a
Time: 20s -> Signal: 111e
Time: 21s -> Signal: 111e
Time: 22s -> Signal: 111e
Time: 23s -> Signal: 111e
...
Time: 31s -> Signal: 111e
Time: 32s -> Signal: 8877
Time: 33s -> Signal: 8877
...
Time: 49s -> Signal: 8877
Time: 50s -> Signal: 00f3
Time: 51s -> Signal: 00f3
...
Time: 55s -> Signal: 00f3
Time: 56s -> Signal: 1000
Time: 57s -> Signal: 1000
...代表时间还在流逝。这是为了根据上面的文本文件显示数据的转换。输出运行长达60s
假设您的文件为 signals.txt
def read_signal(filename):
with open(filename) as fh1:
d = {}
for line in fh1:
(t, s) = line.split()
d[int(t)] = s
for i in range(15,61):
if i in sorted(d):
j = d[i]
print ("Time: " + str(i) + "s -> Signal: " + j)
read_signal("signals.txt")
在我开始之前,我在这里和 Python 都只是初学者,我正在从事类似从文件中提取数据,然后从我需要生成信号的数据中提取数据的工作数据。我不知道如何准确解释它,但我会尽力解释问题,然后就可以了。我得到了一个文本文件,如:
12 0011
15 001a
20 111e
32 8877
50 00f3
56 1000
我能够读取文件并将它们放入字典中:
def dictionary(filename):
d = {}
f = open(filename,'r')
for lines in f:
line = lines.split(' ',1)
line[1] = line[1].replace('\n','')
d[line[0]] = line[1]
f.close()
for k in sorted(d.keys()):
print 'Keys:', k, '-> Values:', d[k]
return d
那么第二部分,它涉及到文本文件,其中第一列代表时间,第二列代表数据。这意味着在时间 = 15s 时,数据为 001a 直到时间 = 20s,数据变为 111e。数据继续相同 (111e) 直到时间 = 32s,此时数据再次变为 8877。同样的过程还在继续。我被要求在 time = 15s 到 time = 60s 的时间内以 1s 的间隔提取产生的输出。问题是我不知道做这部分的确切方法。我不知道如何转到下一个键。我试过 enumerate(d)
但它一直弹出 AttributeError。我也试过 d.iteritems().next()
但它进入了无限循环。这是我的代码:
def output(d):
a = 0
keys = sorted(d.keys())
while a <= 45:
time = a + 15
for k in keys:
if time == k:
sig = d[k]
else:
while time != k:
k = d.iteritems().next()[0]
print 'Time:', time, '-> Signal:' sig
a += 1
谁能帮帮我?非常感谢。
编辑:为了更好地理解,预期输出如下:
Time: 15s -> Signal: 001a
Time: 16s -> Signal: 001a
Time: 17s -> Signal: 001a
Time: 18s -> Signal: 001a
Time: 19s -> Signal: 001a
Time: 20s -> Signal: 111e
Time: 21s -> Signal: 111e
Time: 22s -> Signal: 111e
Time: 23s -> Signal: 111e
...
Time: 31s -> Signal: 111e
Time: 32s -> Signal: 8877
Time: 33s -> Signal: 8877
...
Time: 49s -> Signal: 8877
Time: 50s -> Signal: 00f3
Time: 51s -> Signal: 00f3
...
Time: 55s -> Signal: 00f3
Time: 56s -> Signal: 1000
Time: 57s -> Signal: 1000
...代表时间还在流逝。这是为了根据上面的文本文件显示数据的转换。输出运行长达60s
假设您的文件为 signals.txt
def read_signal(filename):
with open(filename) as fh1:
d = {}
for line in fh1:
(t, s) = line.split()
d[int(t)] = s
for i in range(15,61):
if i in sorted(d):
j = d[i]
print ("Time: " + str(i) + "s -> Signal: " + j)
read_signal("signals.txt")