【问题标题】:Data and signal extraction from a file从文件中提取数据和信号
【发布时间】:2015-10-02 14:48:29
【问题描述】:

在开始之前,我只是这里以及 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) 直到时间 = 32 秒,此时数据再次更改为 8877。同样的过程继续进行。我被要求在 1s 的时间间隔内提取从 time = 15s 到 time = 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

谁能帮助我?非常感谢。

编辑:为了更好地理解,预期的输出如下:

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

【问题讨论】:

  • 你能解释一下你想在这里做什么吗?..发布预期的输出?..
  • 预期输出:Time: 15s -&gt; Signal: 001a 时间:16s -> 信号:001a 时间:17s -> 信号:001a 时间:18s -> 信号:001a 时间:19s -> 信号:001a 时间:20s -> 信号:111e 时间:21 秒 -> 信号:111e 时间:22 秒 -> 信号:111e 时间:23 秒 -> 信号:111e ... 时间:31 秒 -> 信号:111e 时间:32 秒 -> 信号:8877 时间: 33s -> 信号:8877 ... 时间:49s -> 信号:8877 时间:50s -> 信号:00f3 时间:51s -> 信号:00f3 ... 时间:55s -> 信号:00f3 时间:56s -> 信号: 1000 时间: 57s -> 信号: 1000 到 60s

标签: python dictionary key next


【解决方案1】:

假设您的文件为 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")

【讨论】:

  • 谢谢!它可以工作,不知道if i in (sorted(d)) 可以工作。非常感谢
  • 是的!它只是对键进行排序。类似于sorted(d.keys())。不需要那些额外的括号。只需使用if i in sorted(d): 对此感到抱歉。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2013-12-05
  • 2015-08-30
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多