[英]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.