我是编程和Python的新手 我编写了一个实现unix尾部的函数:
def tail(file):
strin = open(file, 'r')
lis = strin.readlines()
lastline = lis[-1]
return lastline
strin.close()
但我认为它在表现上并不是最佳的 我该如何改进?
答案 0 :(得分:6)
您可以使用Collections.deque
def tail(filename, n=10):
'Return the last n lines of a file'
return deque(open(filename), n)
请参阅: - https://docs.python.org/2/library/collections.html#deque-recipes
答案 1 :(得分:0)
由于您只想要最后一行,因此无需存储所有行:
lis = strin.readlines()
lastline = lis[-1]
根据Iterate through Python list and do something on last element的答案提高效率:
for line in open(file, 'r'):
pass
else:
return line
(我不知道Collections.deque解决方案,我同意它更好,也可以参数化为n行)
答案 2 :(得分:0)
您的代码存在一些问题。首先,您在返回后关闭文件。返回声明后的所有内容都无法到达。其次,当您使用文件时,应使用with
。它打开你的文件,当它离开块时它将为你关闭它。最后,您可以将三行合并到oneliner。
我会这样写:
def tail(file):
with open(file, 'r') as o:
return o.readlines()[-1]