繁体   English   中英

Python seek()后跟readline()给出空字符串

[英]Python seek() followed by a readline() gives empty string

我在这里使用与问题类似的东西:

Python:撤消Python文件readline()操作,以便文件指针恢复到原始状态

但似乎行为异常。

我的代码:(运行时的值显示为注释)

def parse_shell(self, filename):
    output = None
    with open(self.shells_path + filename) as fp:
        first_line = fp.readline()
# first_line = 'Last login: Tue Jun  9 07:13:26 on ttys0'
        while len(string.split(first_line, '$')) == 1:
            last_pos = fp.tell()
            # last_pos = 43
            first_line = fp.readline()
# first_line =' 2015-06-09 08:18:23 [coryj@Corys-MacBook-Pro ~]$ ping 10.2.2.1'

        fp.seek(last_pos)
        for line in fp.readline():
            # line = ''
            line_chunks = string.split(line, '$')

根据文档,readline()仅在遇到EOF时才应返回空字符串。 这个特定的文件超过200k,所以我不明白为什么会得到一个空字符串。

问题是该语句:
while len(string.split(first_line, '$')) == 1:不能为True,因此脚本永远不会进入while循环。 string.split()将产生至少两个成员的列表,例如["some",""] ,因此len = 2至少。

此外,while循环将在语句True时运行,如果它变为False则退出。

希望对您有所帮助! 如果您觉得我的回答对您有用,请随时接受。 :-)

就像o11c和Lawrence所说:

for line in fp.readlines()中的行有效

for line in fp中的行有效

for line in fp.readline()不是有效的构造。

我不明白string.split什么? 您是说str.split吗? 从您要尝试执行的操作-看起来-您想将其中包含$所有行拆分为多个部分,并忽略其他行。 在您的特定情况下,这些行似乎在文件的开头。 一个更简单的方法是

for line in fp:
    if line.find('$') >= 0:
        line.split('$')  # or str.split(line, '$')

其他人已经指出了这一点, line in fp.readlines()静止line in fp.readlines()中的line in fp.readline()不同。 前者将遍历列表中收集的文件的所有行,后者将仅遍历一行的所有字符。

您要执行的操作是line in fp.readline()中的行实际上是尝试遍历该行的内容-可能不是您想要的。

' 2015-06-09 08:18:23 [coryj@Corys-MacBook-Pro ~]$ ping 10.2.2.1'

因此,将其更改为line in fp (首选)或line in fp.readlines() 你应该很好

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM