Javascript 从任意行X开始读取很长文件的最快方法
我有一个由python程序写入的文本文件,然后由另一个程序读入并显示在web浏览器上。目前它是由JavaScript读入的,但我可能会将此功能移到python中,并使用ajax请求将结果传递到JavaScript中 该文件不时不定期更新,有时会追加一行,有时多达十行。然后,我需要将文件的更新副本复制到javascript,以便在web浏览器中显示。该文件可能会增长到100000行。新数据始终添加到文件末尾 在当前编写的过程中,javascript每秒检查一次文件的长度,如果文件比上次读入时长,它会从头开始重新读入,对于10000多行的文件来说,这很快就会变得很难处理。由于程序有时可能需要每秒钟更新一次文件,所以情况更是如此 用javascript将数据显示到前端的最快/最有效的方法是什么 我想我可以:Javascript 从任意行X开始读取很长文件的最快方法,javascript,python,performance,file,io,Javascript,Python,Performance,File,Io,我有一个由python程序写入的文本文件,然后由另一个程序读入并显示在web浏览器上。目前它是由JavaScript读入的,但我可能会将此功能移到python中,并使用ajax请求将结果传递到JavaScript中 该文件不时不定期更新,有时会追加一行,有时多达十行。然后,我需要将文件的更新副本复制到javascript,以便在web浏览器中显示。该文件可能会增长到100000行。新数据始终添加到文件末尾 在当前编写的过程中,javascript每秒检查一次文件的长度,如果文件比上次读入时长,它
file.next()
15000次才能到达我要开始读取文件的位置,有更好的方法吗
对于方法#2,由于我无论如何都需要写入文件,我不读取文件是否节省了大量处理时间
也许还有其他方法我没有考虑过
摘要:该程序需要在web浏览器中显示来自python的数据,这些数据不断更新,可能会增长到10万行。因为我每1秒检查一次更新,所以它需要高效,以防它必须连续执行大量更新。打开一个大文件并读取最后一部分既简单又快速:打开文件,找到靠近末尾的合适点,从那里读取。但是你需要知道你想读什么。如果您知道要读取和显示多少字节,就可以轻松地执行此操作,因此,在不保持文件打开的情况下,跟踪以前的文件大小会很好地工作 如果您记录了以前的大小(以字节为单位),请按如下方式读取新内容
fp = open("logfile.txt", "rb")
fp.seek(old_size, 0)
new_content = fp.read() # Read everything past the current point
在Python3上,这将读取必须转换为str
的字节。如果文件的编码为拉丁文1,则如下所示:
new_content = str(new_content, encoding="latin1")
print(new_content)
然后,您应该更新old_size
,并将该值保存在持久存储中,以备下一轮使用。你没有说你是如何记录上下文的,所以我不会建议一种方法
如果您可以在服务器进程中持续打开文件,请继续使用@MarcJ链接到的tail-f
方法进行操作。打开一个大文件并读取最后一部分既简单又快速:打开文件,找到靠近末尾的合适点,从那里读取。但是你需要知道你想读什么。如果您知道要读取和显示多少字节,就可以轻松地执行此操作,因此,在不保持文件打开的情况下,跟踪以前的文件大小会很好地工作
如果您记录了以前的大小(以字节为单位),请按如下方式读取新内容
fp = open("logfile.txt", "rb")
fp.seek(old_size, 0)
new_content = fp.read() # Read everything past the current point
在Python3上,这将读取必须转换为str
的字节。如果文件的编码为拉丁文1,则如下所示:
new_content = str(new_content, encoding="latin1")
print(new_content)
然后,您应该更新old_size
,并将该值保存在持久存储中,以备下一轮使用。你没有说你是如何记录上下文的,所以我不会建议一种方法
如果您可以在服务器进程中保持文件持续打开,请继续以tail-f
的方式执行,就像@MarcJ链接到的那样。您搜索的函数是seek
f.seek(偏移,从什么开始)
通过向参考点添加偏移来计算位置;参考点由from_what参数选择。A from_值0从文件的开头开始测量,1使用当前文件位置,2使用文件的结尾作为参考点。从_可以省略什么,默认为0,使用文件的开头作为参考点
Python 3的限制:
在文本文件(那些在模式字符串中没有ab
打开的文件)中,只允许相对于文件开头进行查找(例外情况是使用seek(0,2)查找文件结尾),并且唯一有效的偏移量值是从f.tell()返回的值,或零。任何其他偏移值都会产生未定义的行为
请注意,由于行的长度可以是可变的,因此查找特定行是很困难的。相反,记下文件中的当前位置(f.tell()
),然后返回到该位置。您查找的函数是seek
f.seek(偏移,从什么开始)
通过向参考点添加偏移来计算位置;参考点由from_what参数选择。A from_值0从文件的开头开始测量,1使用当前文件位置,2使用文件的结尾作为参考点。从_可以省略什么,默认为0,使用文件的开头作为参考点
Python 3的限制:
在文本文件(那些在模式字符串中没有ab
打开的文件)中,只允许相对于文件开头进行查找(例外情况是使用seek(0,2)查找文件结尾),并且唯一有效的偏移量值是从f.tell()返回的值,或零。任何其他偏移值都会生成und