当前位置: 首页 > news >正文

怎么自动下载多个文件?

这是我遇到的第一个问题。当数据量很大时,一般都会分成很多个文件存放。这时下载文件比较麻烦。

A:用Wget命令。Windows下花费一点时间去下载安装。但之于手动下载,能省不少时间。

我提供两种方式方式下载文件,

a)用Wget的递归下载选项 “-r”。一般命令如下

wget –r http://<下载数据的根目录>/ -o <下载记录文件名> -np

因为递归下载没法控制进度,所以建议不一要次递归下载太多的文件

b)用Bat+Wget,多次执行Wget。一般命令如下

wget –r http://<下载数据的根目录分支1>/ -o <下载记录文件名> -np

wget –r http://<下载数据的根目录分支2>/ -o <下载记录文件名> -np

wget –r http://<下载数据的根目录分支3>/ -o <下载记录文件名> -np

…… ……

wget –r http://<下载数据的根目录分支N>/ -o <下载记录文件名> -np

用Bat可以降低出错带来的影响。

另外,Wget可以通过 –A 选项来指定希望下载的文件的后辍,通过 –P 选项来指定下载文件存放路径。更多命令,参见wget -h

Q:这速度。。。什么时候才能下完?

网速永远是个瓶颈

A:如果下载服务很远的话,你应该考虑代理。wget设置代理的方式如下

set http_proxy=http://<代理服务器>

不要忘了多开几个进程,20个试试?

打开文件

Q:怎么打开文本文件

这不是弱智问题。你用记事本打开一个1000MB的文件试试

A:LTF viewer

Large Text File viewer, 打开速度会让你惊奇

Q:怎么打开二进制文件

A:Hex Editor Neo

你可以通过下面方式来选择进制:

右击数据区 => Display As => Hex|Decimal|Octal|Binary|Float|Double

你可以通过下面方式来选择按多少字节显示:

右击数据区 => Group By => Bytes|Words|Double|Quad

编程语言

当数据量很大时,选择语言要慎重了。因为不同语言有不同的特点,你要在编程时间和运行时间之间权衡。

模型测试

开始时,一般挑几个小的数据进行测试,获取第一份分析结果。这时当然希望能快速编程实现。脚本语言是一个很好的选择,比如Python。

大量处理

开始遍历处理所有数据时,用脚本语言来处理就不太合适了。因为脚本语言的运行时间不能让人接受。另外,还有内存使用,文件读写这些你都没法控制。不幸的是,很少语言会为你处理海量文件做优化。

这时,C/C++是最好的选择。

结果展示

漫长的等待终于过去了,眼看就要出结果了。如果你还执着于陪伴你度过漫长等待的C/C++的话,你迟早会沮丧的。

我尝试了很多方式之后,得出的结论是,让Matlab来接手C/C++。Matlab能轻而易举地展示大量数据。更重要的是Matlab支持读取二进制文件。

filename = 'out.bin'; % binary file
fid = fopen( filename );
data = fread( fid, itemsNumber, '*uint32');
fclose(fid);

算法

一次性读文件

我已经测试过好几次了,一次性读取文件比一行一行读文件至少快五倍

记住O(N)

这时你要好好考虑算法的复杂度了。任何O(N2)的算法都不可取。

必要的时候可以通过空间来换时间。通常哈希表能节省不少时间。

并行处理

温习一下并行算法。这比等待单线程程序好很多。

可以考虑在GPU上跑程序。当然,内存和文件读取时间更可能是瓶颈。

内存、CPU、磁盘读取速度,谁是瓶颈,任务管理器知道。

优化核心代码

通常80%的时间在运行20%的代码。所以有空的话优化下经常经常执行的代码。

分布式保存

把分析结果存在一个文件中是一个很糟糕的决定。这会为后面处理带来很多麻烦。比如并行处理,文件过大等。

二进制方式保存中间数据

二进制方式存放通常能省一半的磁盘空间。这同时意味着减少一半的写硬盘时间和读硬盘时间。当然,还有文本转换时间。

还有个重要细节要注意:在Windows中,读写文件的方式要改成”rb”和”wb”。要不然莫名的Bug迟早要发生,但不一定能找到。

运行

Debug Vs Release

别忘了,最终运行时把编译方式换成Release。但是刚改完程序的话,建议先用Debug模式试跑一下。这样能定位运行时异常。

批处理

批处理是降低运行出错风险的很好的方式。因为你不确定程序能正常结束。所以一段一段执行程序是一个很好的选择。如果某个地方出问题的话就不用重新运行前面的程序了。

断言

当数据量很大时,很难保证输入是合法的。另一种情况是,数据是合法的,但我们欠考虑了。这时断言就显得很重要了。断言回增加运行时间,但总比花大量时间得到一个错误结果好。

记录运行结果到文件

前面提到,数据量很大时,很难保证程序正常结束。一般,很少人会在显示器旁坐等输出结果。把运行情况定时记录到文件是非常必要的。

另外,不要忘了fclose();

附:64位编程问题

数据量很大时,内存通常是不够用的。有一个常识必须知道:32位程序的最大寻址空间是2GB。如果你要分配接近或者超过2G内存的话,试试64位程序吧。当然有两条件:64位的CPU,64位的操作系统。

下面是编写64位程序的一些经验

编译环境

如果是解释型语言,比如Python,则需要下载一个64位的Python解释器

如果是编译型语言,比如C/C++,则需要选择恰当的编译平台。

比如VS2008中,项目属性 => Configuration Manager => Platform => New => X64

内存

分配大数组,应该用malloc,而不是直接定义数组。

sizeof( int ) != sizeof( size_t )

64位程序中,数组下标应该换成size_t,常数也需要强制转换,比如 4GB = 4*(size_t)1000000000000

文件

fwrite一次性写入一个大于4GB的数组似乎有些问题。

分多次写入文件试试。

就写到这了,很晚了。。。

欢迎各种补充,我会不断更新这篇文章;觉得有用的话,速度分享链接;有不同意见的话,果断拍砖;

精彩评论

#8楼2010-12-03 09:03 | LeftNotEasy
这个得顶,感谢楼主的分享:)
我也是常常做海量数据的分析,不过一般是在分布式系统上。楼主怎么会用windows来做海量数据的分析呢。
在单机上跑海量数据的处理,特别是训练模型之类的,一般很难实现的,很多训练模型的算法都要求数据能够在内存中保存。
在分布式的环境下,用python是可行的,毕竟python的开发时间短,而且运行时间不比c++慢多少倍

#10楼2010-12-03 09:09 | 木鱼

引用BAsil:不错,问个问题32位程序的最大寻址空间为什么是2GB而不是4GB呢(2的32次方)?


32位系统寻址最大是4GB,因为硬件映射等造成的内存3.3G以上无法被系统使用,因此最大可使用内存在3.3G,而操作系统是个多任务的系统,需要保留自己的内存空间并对每个程序运行的空间进行限制,在32位系统上这个限制是2GB.即使通过PAE在32位系统上支持超过4GB的内存,这个2GB的限制还是存在的.

http://www.gsyq.cn/news/1635908.html

相关文章:

  • AI模型中规划与执行分离:开启智能应用新范式
  • 爱丽丝的发丝──《爱丽丝惊魂记:疯狂再临》制作点滴
  • 5分钟永久解锁Office:零风险激活Microsoft 365的终极指南
  • H5支付实战:后端生成表单与支付宝客户端唤起的无缝衔接
  • ax-M3 开源实测:部署、推理与基准测试全记录
  • 速掌柜ERP-TemuTikTok Shop专精跨境ERP
  • 【关注可白嫖源码】--课程设计+毕业设计+django大学生健康信息可视化管理系统[编号:project35522](案例分析)
  • Video2X 6.0.0 终极指南:如何免费让模糊视频秒变4K高清
  • 复变函数:拉普拉斯逆变换、常见性质、解微分方程的一般通法
  • windows网络适配器驱动开发-泛型分段卸载(上)
  • windows网络适配器驱动开发-泛型分段卸载(下)
  • 三步搞定E-Hentai漫画收藏:免费批量下载终极指南
  • postgresql
  • 如何快速掌握RenameIt:Sketch设计师必备的批量重命名终极指南
  • 终极AMD Ryzen调试工具SMUDebugTool:5步成为硬件掌控大师
  • 机器学习与模式识别 第八章 MAP与偏方差 考点压缩
  • Hetzner创建云服务器SSH Keys配置介绍(公钥、私钥、密钥配置、SSH配置)
  • ICM-42605与STM32F437ZG在运动追踪中的硬件与算法实现
  • 嵌入式精确计时系统:CS2200-CP与PIC18F2455的硬件设计与优化
  • TVA在具身智能商业化部署中的技术突破(13)
  • 从CVE-2020-27986看SonarQube安全加固:构建纵深防御的代码审计平台
  • 好用的区域教育一体化管理平台源头厂家
  • git的基本了解
  • GPT-4与GPT-4 Turbo核心差异:上下文、知识、稳定性与成本的工程真相
  • 计算机毕业设计之jsp克拉玛依职业技术学院信息工程系网站
  • Db2数据库手工SQL注入实战:从原理到靶场复现
  • E-Hentai下载器完整指南:3分钟掌握免费画廊打包技巧
  • 2025终极指南:如何轻松突破Google Drive PDF下载限制的3个关键步骤
  • 是谁给你的身份?中小政企轻量化本地 IAM 通用部署与选型全指南
  • 【下一代智慧养老:架构与实战连载】前言