我用的是类似于这里的问题:
Python: Undo a Python file readline() operation so file pointer is back in original state
但似乎行为不端。在
我的代码:(运行时的值显示为注释)
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循环将在while语句
True
时运行,如果变成False
,则会退出。在我希望它能帮上忙!如果你觉得我的回答对你有用,请随意接受。:-)
就像o11c和劳伦斯说的:
for line in fp.readlines()
有效for line in fp
有效for line in fp.readline()
不是有效的构造。在我不知道
string.split
是什么?你是说str.split
?从您所要做的-看起来-您希望将所有包含$
的行拆分为部分,并忽略其他行。在您的特殊情况下,这些行似乎在文件的开头。更简单的方法是其他人已经指出了这一点,仍然-}不同。前者将迭代列表中收集的文件的所有行,后者将只迭代一行的所有字符。在
line in fp.readlines()
与{您要做的是
^{pr2}$line in fp.readline()
实际上是在尝试迭代行的内容-这可能是您想要的而不是。在所以把它改成
line in fp
(首选)或line in fp.readlines()
。你应该是好人希望有帮助。在
相关问题 更多 >
编程相关推荐