网站的新用户,如果我格式错误,我会道歉。
所以我在文件中搜索包含
的行 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
符合" S"和cnt2
符合" a"从接受。
问题在于我是Python的新手,我无法让循环工作。
cnt1
我在阅读行上做了cnt2
,因为我要查找的行在文本文件中每隔几分钟重复一次。
最初我想从底部扫描并在到达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]
。
希望当我理解原始循环的问题时,我可以解决这个问题。
此处结束目标:
file.txt 有多行
serverlist(count)
我想只删除该行的serverlist()
和响应时间,并使用变量将其显示在其他地方。
该行的范围可以从<timestamp/date> Server[x] ip.ip.ip.ip response=<time> accepted <unneeded garbage>
到Server[x]
,每隔几分钟就会检查相同的响应时间,因此我需要避免重复,只获取日志底部的最新条目。
对不起,这是漫长而令人困惑的。
编辑:
以下是我一直在想的应该工作,但它没有:
Server[0]
我的测试日志文件有服务器[4]到服务器[0]。我认为以上将从文件的底部,打印服务器[4]行,然后服务器[3]行等读取,并在它达到0时停止。理论上这将使它不会读取文件中的每一行(运行得更快)它只会给我最新的数据。但是当我用Server[999]
运行它时,它会陷入循环并永远运行。如果我使用任何其他值(如1或2)运行它,则返回空白列表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
。我认为我误解了这是如何工作的。
答案 0 :(得分:2)
这是我的第一个方法:
def serverlist(count):
with open("file.txt", "r") as f:
for line in f.readlines():
if "Server[" + str(count) + "]" in line:
return line.split()[1] # split on spaces
return False
print serverlist(30)
# ip.ip.ip.ip
print serverlist(";-)")
# False
您可以更改line.split()[1]
中的索引以获取该行的特定空格分隔字符串。
编辑:当然,只需删除if条件即可获取所有IP:
def serverlist():
ips = []
with open("file.txt", "r") as f:
for line in f.readlines():
if line.strip().startswith("Server["):
ips.append(line.split()[1]) # split on spaces
return ips