从指定字母到指定字母的切片变量,其长度不同

时间:2016-05-20 22:03:29

标签: python python-2.7

网站的新用户,如果我格式错误,我会道歉。

所以我在文件中搜索包含

的行

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 。我认为我误解了这是如何工作的。

1 个答案:

答案 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