首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl -将对象大小机械化得太大

Perl -将对象大小机械化得太大
EN

Stack Overflow用户
提问于 2015-05-14 13:47:15
回答 1查看 103关注 0票数 1

我正在尝试使用WWW::Mechanize从数据库中获取一个xml文件。我知道这个文件相当大(比我的内存还要大),它经常崩溃,要么我试图在浏览器中查看它,要么尝试使用get()存储在一个文件中。我计划在将来使用XML::Twig,但我永远无法将结果存储在文件中。

有没有人知道如何将机械化的对象分割成小块,一个接一个地得到,然后一个接一个地存储在一个文件中,一个接一个,而不耗尽内存?

以下是查询api:ArrayExpress程序访问

谢谢。

代码语言:javascript
复制
#!/usr/bin/perl 

use strict;
use warnings;

use WWW::Mechanize;

my $base = 'http://www.ebi.ac.uk/arrayexpress/xml/v2/experiments';
#Parameters
my $query ='?species="homo sapiens"' ;
my $url = $base . $query;

# Create a new mechanize object
my $mech = WWW::Mechanize->new(stack_depth=>0);

# Associate the mechanize object with a URL
$mech->get($url);

#store xml content
my $content = $mech->content;

#open output file for writing
unlink("ArrayExpress_Human_Final.txt");
open( $fh, '>>:encoding(UTF-8)','ArrayExpress_Human_Final.txt') || die "Can't open file!\n";
print $fh $content;
close $fh;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-14 14:15:15

听起来,您想要做的是直接将文件保存到磁盘,而不是将其加载到内存中。

机械常见问题的问题“我如何保存一个图像?我如何保存一个大的tarball?”

您还可以使用:content_file标志get()将任何内容直接保存到磁盘,这是LWP::UserAgent的一部分。

代码语言:javascript
复制
$mech->get( 'http://www.cpan.org/src/stable.tar.gz',
            ':content_file' => 'stable.tar.gz' );

还请注意,如果您所做的只是下载文件,那么使用WWW::Mechanize和直接使用底层LWP::UserAgent可能是没有意义的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30239055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档