我正在为Web应用程序编写一个日志文件查看器,为此我想通过日志文件的行分页.文件中的项目是基于行的,底部是最新项目.
所以我需要一种tail()方法,可以n从底部读取行并支持偏移量.我想出的是这样的:
def tail(f, n, offset=0):
"""Reads a n lines from f with an offset of offset lines."""
avg_line_length = 74
to_read = n + offset
while 1:
try:
f.seek(-(avg_line_length * to_read), 2)
except IOError:
# woops. apparently file is smaller than what we want
# to step back, go to the beginning instead
f.seek(0)
pos = f.tell()
lines = f.read().splitlines()
if len(lines) >= to_read or pos == 0:
return lines[-to_read:offset and -offset or None]
avg_line_length …Run Code Online (Sandbox Code Playgroud) 我知道如何为TXT文件执行此操作,但现在我在为CSV文件执行此操作时遇到了一些麻烦.
如何在Python中从底部读取CSV文件?
许多文本编码都具有以下属性:您可以向后查看编码文本,但仍然可以对其进行解码.ASCII,UTF-8,UTF-16和UTF-32都具有此属性.这可以让你做一些方便的事情,比如读取文件的最后一行而不读取它前面的所有行,或者从文件中的当前位置向后移几行.
不幸的是,Python似乎没有任何方法可以向后解码文件.您不能read向后或seek按编码文件中的字符数量.codecs模块中的解码器支持向前递增解码,但不支持向后解码.似乎没有任何"UTF-8-backwardwards"编解码器,我可以以相反的顺序提供UTF-8字节.
我本可以自己实现与编解码器相关的字符边界同步,向后读取二进制块,并将正确对齐的块提供给codecs模块中的适当解码器,但这听起来像非专家会错过一些细微的细节和没有注意到输出是错误的.
有没有简单的方法可以使用现有工具在Python中向后解码文本?
有几个人似乎错过了阅读整个文件来做到这一点的观点.虽然我在澄清事情,但我还是补充一点,这也需要适用于可变长度编码.UTF-8支持是必须的.
我将数千个时间序列.csv存储在网络驱动器上的文件中。在更新文件之前,我首先获取文件的最后一行以查看时间戳,然后在该时间戳之后使用数据进行更新。如何才能.csv通过网络驱动器快速获取文件的最后一行,从而不必.csv仅使用最后一行就加载整个大文件?
想象一下,我有一个文件
Xpto,50,30,60
Xpto,a,v,c
Xpto,1,9,0
Xpto,30,30,60
Run Code Online (Sandbox Code Playgroud)
txt文件可以附加很多次,当我打开文件时我只想得到txt文件最后一行的值...我怎么能在python上做到这一点?读最后一行?