【发布时间】:2016-09-18 07:09:38
【问题描述】:
网站新手,如果格式不正确,我深表歉意。
所以我正在文件中搜索包含
的行Server[x] ip.ip.ip.ip response=235ms accepted....
其中 x 可以是任何大于或等于 0 的数字,然后将该信息存储在名为 line 的变量中。
然后,我将此内容打印到tkinter GUI,它的窗口信息太多。
为了解决这个问题,我想我会在函数中使用 return line[15:30] 将信息切分,但我想从这些行中删除的信息并不总是介于 15 到 30 之间。
为了解决这个问题,我尝试使用
进行循环return line[cnt1:cnt2]
在循环中检查cnt1 和cnt2,直到cnt1 遇到“S”和cnt2 遇到“a”,从接受。
问题是我是 Python 新手,无法让循环正常工作。
def serverlist(count):
try:
with open("file.txt", "r") as f:
searchlines = f.readlines()
if 'f' in locals():
for i, line in enumerate(reversed(searchlines)):
cnt = 90
if "Server["+str(count)+"]" in line:
if line[cnt] == "t":
cnt += 1
return line[29:cnt]
except WindowsError as fileerror:
print(fileerror)
我在行阅读时做了reversed,因为我正在寻找的行在文本文件中每隔几分钟就会重复一遍。
最初我想从底部扫描并在到达server[0] 时停止,但这个循环也不适用于我。
我放弃并开始只运行serverlist(count) 并指定我正在寻找的服务器编号,而不是仅仅运行serverlist()。
希望当我了解原始循环的问题后,我可以解决此问题。
此处的最终目标:
file.txt 多行带有
<timestamp/date> Server[x] ip.ip.ip.ip response=<time> accepted <unneeded garbage>
我只想从该行中删除Server[x] 和响应时间,并使用变量将其显示在其他地方。
该行的范围可以从Server[0] 到Server[999] 并且每隔几分钟检查一次相同的响应时间,因此我需要避免重复并且只在日志底部获取最新条目。
抱歉,这篇文章冗长且令人困惑。
编辑:
以下是我一直认为应该有效但无效的方法:
def serverlist():
ips = []
cnt = 0
with open("file.txt", "r") as f:
for line in reversed(f.readlines()):
while cnt >= 0:
if "Server["+str(cnt)+"]" in line:
ips.append(line.split()) # split on spaces
cnt += 1
return ips
我的测试日志文件有 server[4] 到 server[0]。我认为上面会从文件底部读取,打印 server[4] 行,然后 server[3] 行等,并在它达到 0 时停止。理论上这会阻止它读取文件中的每一行(运行速度更快)它只会给我最新的数据。但是当我使用while cnt >=0 运行它时,它会陷入循环并永远运行。如果我使用任何其他值(例如 1 或 2)运行它,那么它会返回一个空白列表 []。我想我误解了这将如何工作。
【问题讨论】:
标签: python python-2.7