本发明涉及软件
技术领域:
:,特别是涉及一种加载远程csv文件的方法和装置。
背景技术:
::在科研和商业生产中,用户常常使用excel等软件对表格数据进行定性和定量的分析。然而随着大数据时代的到来,常用的数据处理软件由于受到单机性能的限制,已经无法满足用户对大数据分析和处理的需求。这些大数据文件一般存放在远程的计算机上(例如某项web服务产生的log文件),在不做特殊处理的情况下,用户需要使用安全外壳协议(secureshell,ssh)登录到远程主机上查看和处理这些文件。而且这些文件由于其数据量庞大,很难被直接加载到内存中供用户查看,因此需要编写特殊的程序对其进行读取。jupyternotebook是一个利用浏览器对远程计算机进行访问和编程的工具。通过使用jupyternotebook,用户可以不必登录到远程计算机上,而是直接在浏览器内对远程计算机上的文件进行打开和浏览。然而使用jupyternotebook打开远程表格文件由于表格文件内容较多,加载时间较长,导致文件显示速度较慢。技术实现要素:本发明的目的是提供一种加载远程csv文件的方法和装置,提高文件显示的速度。为实现上述目的,本发明提供了如下方案:一种加载远程csv文件的方法,包括:获取浏览器前端发送的文件打开请求;读取所述文件打开请求所指定文件的前m行数据以及所述文件打开请求所指定文件中数据的总行数,将前m行数据和总行数反馈给所述浏览器前端;获取浏览器前端发送的加载请求;根据所述加载请求读取目标位置的n行数据并反馈给所述浏览器前端。可选的,在所述读取所述文件打开请求所指定文件的前m行数据以及所述文件打开请求所指定文件中数据的总行数,将前m行数据和总行数反馈给所述浏览器前端之后,还包括:将所述文件打开请求所指定文件的文件指针位置更新为第m行。可选的,当所述加载请求为连续浏览加载请求时,所述根据所述加载请求读取目标位置的n行数据并反馈给所述浏览器前端具体包括:读取当前读取行数之后的n行数据并反馈给所述浏览器前端;将所述文件指针位置所指行加n;所述连续浏览加载请求为在当前浏览行的基础上继续向后浏览的请求。可选的,当所述加载请求为跳转请求时,所述根据所述加载请求读取目标位置的n行数据并反馈给所述浏览器前端具体包括:根据所述跳转请求确定跳转位置;从所述跳转位置开始读取所述跳转位置之后的n行数据并反馈给所述浏览器前端。可选的,所述读取当前读取行数之后的n行数据并反馈给所述浏览器前端,具体包括:获取所述文件指针位置所指行;读取所述所指行之后的n行数据,得到连续浏览加载数据;将所述连续浏览加载数据反馈给所述浏览器前端。可选的,所述从所述跳转位置开始读取所述跳转位置之后的n行数据并反馈给所述浏览器前端,具体包括:将所述文件指针位置所指行更新为所述跳转位置所处行,得到指针跳转行;读取所述指针跳转行之后的n行数据,得到跳转加载数据;将所述跳转加载数据反馈给所述浏览器前端;将所述文件指针位置所指行更新为所述指针跳转行之后的第n行。一种加载远程csv文件的装置,包括:前端、数据呈现组件、后端、文件读取模块、文件指针表和文件读取线程池;所述前端和所述数据呈现组件位于浏览器中;所述后端、所述文件读取模块、所述文件指针表和所述文件读取线程池位于存储有待加载的表格文件的远程服务器中;所述前端与所述数据呈现组件双向连接,所述前端还与所述后端双向连接;所述后端与所述文件读取模块双向连接,所述文件读取模块与所述文件指针表以及所述文件读取线程池双向连接;所述文件读取线程池与所述文件指针表双向连接;所述前端用于获取来自用户的浏览请求以及来自所述后端的读取数据,并将所述浏览请求发送至所述后端以及将所述读取数据发送至所述数据呈现组件;所述浏览请求包括文件打开请求、连续浏览加载请求和跳转请求;所述连续浏览加载请求为在当前浏览行的基础上继续向后浏览的请求;所述数据呈现组件用于在浏览器中呈现所述读取数据;所述后端用于将来自所述前端的浏览请求发送至所述文件读取模块,并将来自所述文件读取模块的读取数据发送至所述前端;所述文件读取模块用于在获取到所述文件打开请求后启动所述文件读取线程池从而读取所述文件打开请求所指定文件的前m行数据以及所述文件打开请求所指定文件中数据的总行数,并将前m行数据和总行数发送给所述后端;在获取到所述连续浏览加载请求时,读取所述文件指针表中的文件指针位置,启动所述文件读取线程池读取所述文件指针位置之后的n行数据,将读取的n行数据反馈给所述浏览器前端,将文件指针位置所指行加n;在获取到所述跳转请求时,将文件指针位置更新为跳转位置,启动所述文件读取线程池读取所述文件指针位置之后的n行数据,将读取的n行数据反馈给所述浏览器前端,将文件指针位置所指行加n;所述文件指针表用于存储每个表格文件的文件指针位置;所述文件读取线程池用于读取所述表格文件。可选的,所述数据呈现组件为handsontable插件;所述handsontable插件用于将读取数据渲染为电子表格呈现给用户。可选的,所述前端和所述后端均为jupyternotebook插件。根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明提供的加载远程csv文件的方法和装置,在加载远程csv文件时,先加载前m行数据,并在每次得到新的加载请求时再加载n行数据,本发明避免一次性加载全部内容导致加载速度低的问题,可以实现先加载内容优先显示的效果,提高了文件显示的速度。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为实施例1的加载远程csv文件的方法的方法流程图;图2为本发明的实施例2的加载远程csv文件的装置的结构图;图3为本发明文件打开请求时浏览器的显示效果图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。实施例1:该实施例1提供一种加载远程csv文件的方法。图1为实施例1的加载远程csv文件的方法的方法流程图。参见图1,该加载远程csv文件的方法,包括:步骤101:获取浏览器前端发送的文件打开请求。步骤102:读取所述文件打开请求所指定文件的前m行数据以及所述文件打开请求所指定文件中数据的总行数,将前m行数据和总行数反馈给所述浏览器前端。步骤103:获取浏览器前端发送的加载请求。步骤104:根据所述加载请求读取目标位置的n行数据并反馈给所述浏览器前端。可选的,步骤102之后,还包括:将所述文件打开请求所指定文件的文件指针位置更新为第m行。可选的,当所述加载请求为连续浏览加载请求时,步骤104具体包括:读取当前读取行数之后的n行数据并反馈给所述浏览器前端;将所述文件指针位置所指行加n;所述连续浏览加载请求为在当前浏览行的基础上继续向后浏览的请求。可选的,当所述加载请求为跳转请求时,步骤104具体包括:根据所述跳转请求确定跳转位置;从所述跳转位置开始读取所述跳转位置之后的n行数据并反馈给所述浏览器前端。可选的,所述读取当前读取行数之后的n行数据并反馈给所述浏览器前端,具体包括:获取所述文件指针位置所指行;读取所述所指行之后的n行数据,得到连续浏览加载数据;将所述连续浏览加载数据反馈给所述浏览器前端。可选的,所述从所述跳转位置开始读取所述跳转位置之后的n行数据并反馈给所述浏览器前端,具体包括:将所述文件指针位置所指行更新为所述跳转位置所处行,得到指针跳转行;读取所述指针跳转行之后的n行数据,得到跳转加载数据;将所述跳转加载数据反馈给所述浏览器前端;将所述文件指针位置所指行更新为所述指针跳转行之后的第n行。实施例2:该实施例2提供一种加载远程csv文件的装置。该加载远程csv文件的装置是典型的前端-后端模式的系统。其中,前端负责监听预先定义的事件,并将后端返回的数据在浏览器中渲染出来;后端负责接收前端的信号,做出相应的文件指针移动与读取操作,同时记录相关的信息,并将数据返回给前端。图2为本发明的实施例2的加载远程csv文件的装置的结构图。参见图2,该加载远程csv文件的装置包括:前端1、数据呈现组件2、后端3、文件读取模块4、文件指针表5和文件读取线程池6;所述前端1和所述数据呈现组件2位于浏览器中;所述后端3、所述文件读取模块4、所述文件指针表5和所述文件读取线程池6位于的存储有待加载的表格文件的远程服务器中。浏览器可根据远程服务器的ip地址打开jupyternotebook界面,并显示远程服务器上的文件列表。所述前端1与所述数据呈现组件2双向连接,所述前端1还与所述后端3双向连接;所述后端3与所述文件读取模块4双向连接,所述文件读取模块4与所述文件指针表5以及所述文件读取线程池6双向连接;所述文件读取线程池6与所述文件指针表5双向连接;所述前端1用于获取来自用户的浏览请求以及来自所述后端3的读取数据,并将所述浏览请求发送至所述后端3以及将所述读取数据发送至所述数据呈现组件2;所述浏览请求包括文件打开请求、连续浏览加载请求和跳转请求;所述连续浏览加载请求为在当前浏览行的基础上继续向后浏览的请求。所述数据呈现组件2用于在浏览器中呈现所述读取数据;所述后端3用于将来自所述前端1的浏览请求发送至所述文件读取模块4,并将来自所述文件读取模块4的读取数据发送至所述前端1;所述文件读取模块4用于在获取到所述文件打开请求后启动所述文件读取线程池6从而读取所述文件打开请求所指定文件的前m行数据以及所述文件打开请求所指定文件中数据的总行数,并将前m行数据和总行数发送给所述后端3;在获取到所述连续浏览加载请求时,读取所述文件指针表5中的文件指针位置,启动所述文件读取线程池6读取所述文件指针位置之后的n行数据,将读取的n行数据反馈给所述浏览器前端1,将文件指针位置所指行加n;在获取到所述跳转请求时,将文件指针位置更新为跳转位置,启动所述文件读取线程池6读取所述文件指针位置之后的n行数据,将读取的n行数据反馈给所述浏览器前端1,将文件指针位置所指行加n;所述文件指针表5用于存储每个表格文件的文件指针位置;所述文件读取线程池6用于读取所述表格文件。可选的,所述数据呈现组件2为handsontable插件;所述handsontable插件用于将读取数据渲染为电子表格呈现给用户。handsontable插件以javascript插件的形式集成于浏览器。可选的,所述前端1和所述后端3均为jupyternotebook插件。后端以守护进程的形式部署于远程服务器上。文件读取模块4是远程服务器中的函数库。文件读取线程池6维护了可供文件读取模块4启动的所有子线程,每个子线程负责一个文件的读取。本发明可实现三种情况下的浏览:1、文件打开请求。2、连续浏览加载请求。3、跳转请求。针对第1种情况,即文件打开请求。图3为本发明文件打开请求时浏览器的显示效果图。参见图3,本发明在浏览器网页上添加一个名为“smartopen”的按钮,当文件列表中后缀为csv的文件被勾选时,该按钮变为可点击状态。该按钮绑定的smartopen事件将触发两个get请求,分别为:请求1:以文件路径为参数,同步请求文件的前m行内容。请求2:以文件路径为参数,异步请求文件中内容的总行数total_line_number。请求1和请求2被先后触发后,相应的参数传到后端,后端的webserver(网页服务器)模块收到之后,调用文件读取模块4以读取文件内容。文件读取模块4以文件路径为key在文件指针表5维护有记录当前文件指针位置,文件指针位置的value初始化为0。文件读取模块4启动文件读取线程池6中的1个子线程,使用c++的fstream库读取文件的前m行数据(m优选为1000),并将每一行的数据以逗号分隔开,格式化为一个m维的二维数组返回给前端,然后将文件指针表5中文件指针位置的value值更改为当前文件指针的位置curr_cursor。同时文件读取模块4启动另一个子线程,遍历整个文件并对回车符进行计数得到总行数然后返回给前端。handsontable可以将二维数组渲染成一个电子表格。前端收到请求1的返回的二维数组后,handsontable将二维数组作为输入渲染出的电子表格,并将电子表格呈现在网页上。前端收到请求2的返回数据后,将该文件的行数显示在电子表格上方。针对第2种情况,即连续浏览加载请求,本发明的前端1通过监听鼠标的向下滚动或触摸板的向下翻动动作实现对下拉操作的监听。如果当前页面的末端的位置为curr_cursor-100行时,将会触发请求3:以文件路径为参数,请求接下来的n行(此处n优选为100)。后端收到请求3后,文件读取模块4先后执行如下操作:1).启动一个子线程,以文件路径为key,查询上次读取的文件指针位置curr_cursor;2).使用c++的fstream库的seekg函数,将指针定位到curr_cursor;3).从curr_cursor开始读取接下来的n行内容,将读取内容格式化为二维数组并返回给前端;4).将文件指针表5中以文件路径为key的value改为curr_cursor+n。前端1收到请求3的返回的二维数组后,将其与当前已加载数据拼接为新的二维数组并传递给handsontable插件,以渲染出新的表格。针对第3种情况,即跳转请求,前端的jupyternotebook插件会监听skipto事件。当skipto事件被触发且百分比ω被输入后,将触发get请求4:以文件路径和ω为参数,请求从“ω×文件大小”的位置开始的后续n行(此处n优选为1000)。后端收到请求4后,文件读取模块4将会先后执行如下操作:1).使用c++fstream的seekg函数,将指针定位到“ω×文件大小”处;2).从该位置开始读取接下来的n行,将读取数据格式化为二维数组并返回给前端;3).将文件指针表5中以文件路径为key的value改为“ω×文件大小”处之后的第n行。前端收到请求4的返回的二维数组后,将其作为新的二维数组传递给handsontable插件,以渲染出新的表格。根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明提供的加载远程csv文件的方法和装置,维护了一张存储当前加载位置的文件指针表,而且文件内容的预加载和动态加载实际上是在当前指针的位置向后读取固定的偏移量,因此响应时间与文件大小是无关的。所以即便是非常大的数据文件,浏览器也可以将快速地打开和显示预览,避免一次性加载全部内容导致加载速度低的问题,可以实现先加载内容优先显示的效果,提高了文件显示的速度。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。当前第1页12当前第1页12