python - 使用python比较文本文件中的多行
问题描述
我正在编写一个时间跟踪报告程序,报告每个虚拟机所花费的时间,我在比较 txt 文件时遇到问题,因为唯一改变的是每个虚拟机的数字和小时用过(这就是为什么我不知道如何比较它们)
09:43:04> --- virtual Desktop 2
12:37:20> --- virtual Desktop 6
23:07:00> --- virtual Desktop 1
23:07:07> --- virtual Desktop 2
23:07:09> --- virtual Desktop 3
12:59:04> --- virtual Desktop 1
13:41:53> --- virtual Desktop 5
13:47:09> --- virtual Desktop 3
def main():
f = open("/home/lucasfernandes/Desktop/work/DGNET/logthatmatter.txt", "r")
line = f.readline()
x = "Desktop"
while line:
startime=""
#print(line)
line = f.readline()
#print(line)
if "--- Taskbarbuttons auf Desktop " in line:
print(line [41:42])
#startime = datetime.strptime(line[0:8], '%H:%M:%S')
#print(startime)
#print(line)
else:
if line[41:42] == "6":
print(line)
f.close()
预期的结果是
你把这段时间花在虚拟桌面 2 上:变量
但我不知道如何逐行比较txt文件
解决方案
我会读取完整文件并创建包含所有行的列表,然后从每一行中获取小时和桌面编号。
然后我可以用zip(lines, lines[1:])
成对的线来比较和计算两个值之间的时间
import datetime
# read full file
#text = open(filename).read()
text = '''09:43:04> --- virtual Desktop 2
12:37:20> --- virtual Desktop 6
23:07:00> --- virtual Desktop 1
23:07:07> --- virtual Desktop 2
23:07:09> --- virtual Desktop 3
12:59:04> --- virtual Desktop 1
13:41:53> --- virtual Desktop 5
13:47:09> --- virtual Desktop 3'''
# split on lines, remove empty lines and get only hour and dekstop number
lines = text.split('\n')
lines = [x.strip().split('> --- virtual Desktop ') for x in lines if x.strip()]
#print(lines)
desktop = dict() # for total time for every desktop
diff_24h = datetime.timedelta(days=1) # for some calculations
# works with pairs of lines
for previous, current in zip(lines, lines[1:]):
prev_hour, prev_desktop = previous
curr_hour, curr_desktop = current
print('desktop', prev_desktop, 'start', prev_hour, 'end', curr_hour)
# covnert to datetime
prev_dt = datetime.datetime.strptime(prev_hour, '%H:%M:%S')
curr_dt = datetime.datetime.strptime(curr_hour, '%H:%M:%S')
# calculate different between hours - if current < prev then there is new day and it need correction diff_24h
if curr_dt < prev_dt:
diff_dt = (curr_dt - prev_dt) + diff_24h
else:
diff_dt = (curr_dt - prev_dt)
print('desktop', prev_desktop, 'running', diff_dt)
print('---')
# add time to dictionary to get total time
if prev_desktop not in desktop:
desktop[prev_desktop] = datetime.timedelta()
desktop[prev_desktop] += diff_dt
print('--- results ---')
for key, value in desktop.items():
print('desktop', key, 'total time', value)
结果:
[['09:43:04', '2'], ['12:37:20', '6'], ['23:07:00', '1'], ['23:07:07', '2'], ['23:07:09', '3'], ['12:59:04', '1'], ['13:41:53', '5'], ['13:47:09', '3']]
desktop 2 start 09:43:04 end 12:37:20
desktop 2 running 2:54:16
---
desktop 6 start 12:37:20 end 23:07:00
desktop 6 running 10:29:40
---
desktop 1 start 23:07:00 end 23:07:07
desktop 1 running 0:00:07
---
desktop 2 start 23:07:07 end 23:07:09
desktop 2 running 0:00:02
---
desktop 3 start 23:07:09 end 12:59:04
desktop 3 running 13:51:55
---
desktop 1 start 12:59:04 end 13:41:53
desktop 1 running 0:42:49
---
desktop 5 start 13:41:53 end 13:47:09
desktop 5 running 0:05:16
---
--- results ---
desktop 2 total time 2:54:18
desktop 6 total time 10:29:40
desktop 1 total time 0:42:56
desktop 3 total time 13:51:55
desktop 5 total time 0:05:16
推荐阅读
- google-cloud-platform - 从 IOT 设备接收的数据存储在 Google Cloud 的什么位置?
- python - Python Selenium 硬网络抓取
- flutter - Flutter web:连接服务器进行调试
- python - 托管在应用程序引擎上的 Python 应用程序无法与在本地工作的 Firestore 连接
- php - 如何从字符串变量解析 php 函数?
- flutter - RangeError(索引):无效值:不在包含范围 0..2:3
- python - Python迭代和修改列表逻辑
- python - 已解决的依赖项中有不兼容的版本
- c - 为什么我的代码正在打印从文件中检索到的最后一个值而不是新值
- c# - 在 UWP 中单击汉堡菜单项时如何提高应用程序性能?