Python 从文件中提取数据和信号

Python 从文件中提取数据和信号,python,dictionary,key,next,Python,Dictionary,Key,Next,在我开始之前,我只是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.spli

在我开始之前,我只是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。同样的过程也在继续。我被要求在时间间隔1s内提取从时间=15s到时间=60s产生的输出。问题是我不知道做这部分的确切方法。我不知道怎么去下一个关键点。我试过使用
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

。。。表示仍在运行的时间。这是根据上面的文本文件显示数据的转换。假设您的文件为signals.txt,则输出最多可运行60秒

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")

你能解释一下你想在这里做什么吗?发布一个预期输出吗?预期输出:
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->信号:111e时间:23s->信号:111e。。。时间:31秒->信号:111e时间:32秒->信号:8877时间:33秒->信号:8877。。。时间:49秒->信号:8877时间:50秒->信号:00f3时间:51秒->信号:00f3。。。时间:55秒->信号:00f3时间:56秒->信号:1000时间:57秒->信号:1000到60秒!它可以工作,不知道我在(排序(d))中是否可以工作。非常感谢!它只是把钥匙分类。类似于排序(d.keys())。这些额外的括号是不需要的。如果我在排序中(d):很抱歉,请使用
。)
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")