簡體   English   中英

從文件中提取數據和信號

[英]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。 同樣的過程繼續下去。 我被要求在時間內以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

誰能幫我? 非常感謝。

編輯:為了更好地理解,預期輸出如下:

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

...表示時間仍在運行。 這是為了顯示根據上面的文本文件的數據轉換。 輸出最長可達60秒

假設您的文件為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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM