簡體   English   中英

如何為 Python 中的命令分配時間戳?

[英]How to assign time stamp to the command in Python?

文本文件的第三列中有幾種類型的Commands 所以,我使用正則表達式的方法來 grep 每種命令的出現次數。

例如, ACTIVE發生了 3 次, REFRESH發生了 2 次。 我希望提高我的程序的靈活性。 所以,我希望為每個命令分配時間。

由於一個命令可能發生超過 1 次,如果腳本支持指定時間的命令,那么用戶將知道哪個ACTIVE在什么時間發生。 歡迎任何指導或建議。

這個想法是為腳本提供更靈活的支持。

我的代碼:

import re
a = a_1 = b = b_1 = c = d = e = 0

lines = open("page_stats.txt", "r").readlines()

for line in lines:
    if re.search(r"WRITING_A", line):
        a_1 += 1
    elif re.search(r"WRITING", line):
        a += 1
    elif re.search(r"READING_A", line):
        b_1 += 1
    elif re.search(r"READING", line):
        b += 1
    elif re.search(r"PRECHARGE", line):
        c += 1
    elif re.search(r"ACTIVE", line):
        d += 1

文件內容:

-----------------------------------------------------------------
| Number        | Time |     Command    |      Data             |
-----------------------------------------------------------------
| 1             | 0015 | ACTIVE         |                       |
| 2             | 0030 | WRITING        |                       |
| 3             | 0100 | WRITING_A      |                       |
| 4             | 0115 | PRECHARGE      |                       |
| 5             | 0120 | REFRESH        |                       |
| 6             | 0150 | ACTIVE         |                       |
| 7             | 0200 | READING        |                       |
| 8             | 0314 | PRECHARGE      |                       |
| 9             | 0318 | ACTIVE         |                       |
| 10            | 0345 | WRITING_A      |                       |
| 11            | 0430 | WRITING_A      |                       |
| 12            | 0447 | WRITING        |                       |
| 13            | 0503 | PRECHARGE      |                       |
| 14            | 0610 | REFRESH        |                       |

假設您要計算每個命令的出現次數並存儲每個命令的時間戳,請嘗試:

import re
count = {}
timestamps = {}
with open ("page_stats.txt", "r") as f:
    for line in f:
        m = re.split(r"\s*\|\s*", line)
        if len(m) > 3 and re.match(r"\d+", m[1]):
            count[m[3]] = count[m[3]] + 1 if m[3] in count else 1
            if m[3] in timestamps:
                timestamps[m[3]].append(m[2])
            else:
                timestamps[m[3]] = [m[2]]

# see the limited result (example)
#print(count["ACTIVE"])
#print(timestamps["ACTIVE"])

# see the results
for key in count:
    print("%-10s: %2d, %s" % (key, count[key], timestamps[key]))

Output:

REFRESH   :  2, ['0120', '0610']
WRITING   :  2, ['0030', '0447']
PRECHARGE :  3, ['0115', '0314', '0503']
ACTIVE    :  3, ['0015', '0150', '0318']
READING   :  1, ['0200']
WRITING_A :  3, ['0100', '0345', '0430']
  • m = re.split(r"\s*\|\s*", line)在 pipe 字符上拆分line ,該字符可以在前面和/或后面跟着空白字符。
  • 然后列表元素m[1]m[2]m[3]依次分配給NumberTimeCommand
  • if len(m) > 3 and re.match(r"\d+", m[1])的條件會跳過 header 行。
  • 然后字典變量counttimestamps被一一分配、遞增或附加。

暫無
暫無

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

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