我有一个384MB的文本文件,有5000万行.每行包含2个以空格分隔的整数:键和值.该文件按键排序.我需要一种有效的方法来查找Python中大约200个键列表的值.
我目前的方法包括在下面.这需要30秒.必须有更高效的Python foo才能将其降低到最多几秒钟的合理效率.
# list contains a sorted list of the keys we need to lookup
# there is a sentinel at the end of list to simplify the code
# we use pointer to iterate through the list of keys
for line in fin:
line = map(int, line.split())
while line[0] == list[pointer].key:
list[pointer].value = line[1]
pointer += 1
while line[0] > list[pointer].key:
pointer += 1
if pointer >= len(list) - 1:
break # end of list; -1 is due …Run Code Online (Sandbox Code Playgroud) 是否有Python文件类型用于访问随机行而不遍历整个文件?我需要在一个大文件中搜索,将整个内容读入内存是不可能的.
任何类型或方法将不胜感激.
我有一个大的(12GB)文件,我需要使用Java从中提取小块数据(每个几千字节).一旦文件打开,寻找和读取数据的速度非常快,但打开文件本身需要很长时间 - 大约90秒.有没有办法加快Java中的打开文件操作?
为了澄清,我尝试了以下选项来打开和读取文件:
new FileInputStream(file);
new RandomAccessFile(file, "r");
Files.newByteChannel(path, StandardOpenOption.READ);
Run Code Online (Sandbox Code Playgroud)
其中每一个都产生了类似的结果.
Internet Explorer的文件下载限制为4GB(IE6上为2 GB).Firefox没有这个问题(还没有测试过safari)(更多信息请访问:http://support.microsoft.com/kb/298618)
我正在开发一个网站,允许用户下载非常大的文件(最大和超过100GB)
不使用FTP,最好的方法是什么.最终用户必须能够使用HTTP从浏览器下载文件.我不认为Flash或Silverlight可以将文件保存到客户端,因为据我所知他们不会削减它.
我猜我们需要一个ActiveX或Java applet来解决这个问题.类似于MSDN使用的下载管理器.
有没有人知道这样做的商业(或免费)组件?我们不希望用户必须安装"浏览器范围"的下载管理器(如GetRight),我们希望它只能在我们的网站上下载.
更新:这里有一些额外的信息,以帮助澄清我正在尝试做什么.大多数4GB限制以上的文件都是大型高清视频文件(适用于视频编辑公司).这些将由用户通过互联网下载,这不会是本地网络上的人.我们希望文件可以通过HTTP获得(一些用户将会在防火墙之后,不允许使用FTP,Bittorrent等).这将是最终用户可以下载的文件库,因此我们不是在谈论一次性的大型下载.将定期下载不同的大型文件.
到目前为止,@ Edmund-Tay建议的Vault是迄今为止最接近的解决方案.唯一的问题是它不适用于大于4GB的文件(它在开始下载之前立即失败,它们可能在文件内容长度超过的某处使用32位整数).
一个java applet(或者因为问题只存在于IE中的ActiveX组件)就像@spoulson链接的文章一样,是最好的解决方案,但到目前为止,我还没有找到任何可以做到这一点的运气(多部分下载) ,简历等).
看起来我们可能要写自己的.另一种选择是编写与扩展或mime类型相关联的.Net应用程序(可能是ClickOnce).然后,用户实际上将从exe/ClickOnce应用程序中打开的Web服务器下载一个小文件,该应用程序告诉应用程序要下载哪个文件.这就是MSDN下载器的工作原理.然后,最终用户只需下载/安装一次EXE.这比每次下载大文件时下载exe都要好.
我希望能够随机访问gzip压缩文件.我可以负担得起对它进行一些预处理(比如构建某种索引),只要预处理的结果比文件本身小得多.
有什么建议?
我的想法是:
language-agnostic compression gzip random-access large-files
我正在使用PHP开发电子商务应用程序.为了保证URL的安全,产品下载链接保留在PHP之后.有一个文件,比如download.php,它通过GET接受几个参数并根据数据库验证它们.如果一切顺利,它使用PHP中的readfile()函数提供文件.
现在问题来自传递给readfile()的文件大于php.ini中设置的内存限制因为这个应用程序将被许多用户用于共享托管,我们无法继续改变php.ini设置.
在我们寻找变通方法的努力中,我首先想到我们可以在while循环中进行fread()调用,但似乎会出现问题以及突出显示在PHP中可靠地下载大文件
所以我最好的选择是检测/检查服务器是否支持X-Accel-Redirect(如果是Nginx)/ X-Sendfile(如果是Apache)
如果服务器支持X-Accel-Redirect/X-Sendfile,我可以使用它们,在else块中我可以让系统管理员知道php.ini强制执行的内存限制
理想情况下,我希望尽可能使用像X-Accel-Redirect/X-Sendfile这样的服务器端支持,如果这不起作用 - 我希望有一个回退代码来读取没有readfile()的文件.
我还不确定while循环中的readfile()和fread()是如何不同的,但似乎while循环会产生问题,再次,如在PHP中可靠地下载大文件中所建议的那样
希望得到一些帮助,建议,代码,指导.
谢谢阅读.
我使用以下两种方法,但不适用于12 mb的大数据
char[] chars = new char[1024];
int len;
while((len=buffer.read(chars))>0) {
data.append(chars,0,len);
}
Run Code Online (Sandbox Code Playgroud)
和
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
Run Code Online (Sandbox Code Playgroud) 我需要生成一个非常大的文本文件.每一行都有一个简单的格式:
Seq_num<SPACE>num_val
12343234 759
Run Code Online (Sandbox Code Playgroud)
我们假设我将生成一个包含1亿行的文件.我尝试了两种方法,令人惊讶的是它们提供了非常不同的时间性能.
对于超过100米的循环.在每个循环中我创建短字符串seq_num<SPACE>num_val,然后我将其写入文件.这种方法需要花费很多时间.
## APPROACH 1
for seq_id in seq_ids:
num_val=rand()
line=seq_id+' '+num_val
data_file.write(line)
Run Code Online (Sandbox Code Playgroud)对于超过100米的循环.在每个循环中我创建短字符串seq_num<SPACE>num_val,然后将其附加到列表中.当循环结束时,我迭代列表项并将每个项写入文件.这种方法花费的时间少得多.
## APPROACH 2
data_lines=list()
for seq_id in seq_ids:
num_val=rand()
l=seq_id+' '+num_val
data_lines.append(l)
for line in data_lines:
data_file.write(line)
Run Code Online (Sandbox Code Playgroud)注意:
所以方法1必须花费更少的时间.什么提示我缺少什么?
我已经做了很多研究,找到了一个.NET上传组件,我可以用来上传大文件,有一个进度条,可以恢复上传大文件.我遇到过一些组件,比如AjaxUploader,SlickUpload和PowUpload,仅举几例.这些选项中的每一个都需要花钱,只有PowUpload才能进行可恢复的上传,但它使用的是java applet.我愿意支付一个可以很好地完成这些工作的组件,但如果我能自己编写那些最好的组件.
我有两个问题:
谢谢
奥斯汀
[编辑]
我意识到我确实需要能够为我的项目进行可恢复的文件上传,对组件的任何建议都能做到吗?
我正在使用hdfs -put将大型20GB文件加载到hdfs中.目前该流程运行@ 4分钟.我正在尝试改善将数据加载到hdfs的写入时间.我尝试使用不同的块大小来提高写入速度,但得到了以下结果:
512M blocksize = 4mins;
256M blocksize = 4mins;
128M blocksize = 4mins;
64M blocksize = 4mins;
Run Code Online (Sandbox Code Playgroud)
有谁知道瓶颈可能是什么以及我可以探索的其他选项来提高-put cmd的性能?
large-files ×10
file-io ×3
python ×3
java ×2
performance ×2
ajax ×1
algorithm ×1
android ×1
apache ×1
asp.net ×1
browser ×1
compression ×1
file ×1
file-upload ×1
flash ×1
gzip ×1
hadoop ×1
hdfs ×1
heap-memory ×1
httphandler ×1
large-data ×1
memory ×1
nginx ×1
nio ×1
php ×1
silverlight ×1