python读什么文件最快的软件_python – 读取文本列的大型数据文件的最快方法是什么?...

我有一个近900万行的数据文件(很快就会超过5亿行),我正在寻找最快的读取方式.五个对齐的列被填充并用空格分隔,所以我知道在哪里每行寻找我想要的两个字段.

我的

Python例程需要45秒:

import sys,time

start = time.time()

filename = 'test.txt' # space-delimited, aligned columns

trans=[]

numax=0

for line in open(linefile,'r'):

nu=float(line[-23:-11]); S=float(line[-10:-1])

if nu>numax: numax=nu

trans.append((nu,S))

end=time.time()

print len(trans),'transitions read in %.1f secs' % (end-start)

print 'numax =',numax

而我在C中提出的例程更令人愉快4秒:

#include

#include

#include

#define BPL 47

#define FILENAME "test.txt"

#define NTRANS 8858226

int main(void) {

size_t num;

unsigned long i;

char buf[BPL];

char* sp;

double *nu, *S;

double numax;

FILE *fp;

time_t start,end;

nu = (double *)malloc(NTRANS * sizeof(double));

S = (double *)malloc(NTRANS * sizeof(double));

start = time(NULL);

if ((fp=fopen(FILENAME,"rb"))!=NULL) {

i=0;

numax=0.;

do {

if (i==NTRANS) {break;}

num = fread(buf, 1, BPL, fp);

buf[BPL-1]='\0';

sp = &buf[BPL-10]; S[i] = atof(sp);

buf[BPL-11]='\0';

sp = &buf[BPL-23]; nu[i] = atof(sp);

if (nu[i]>numax) {numax=nu[i];}

++i;

} while (num == BPL);

fclose(fp);

end = time(NULL);

fprintf(stdout, "%d lines read; numax = %12.6f\n", (int)i, numax);

fprintf(stdout, "that took %.1f secs\n", difftime(end,start));

} else {

fprintf(stderr, "Error opening file %s\n", FILENAME);

free(nu); free(S);

return EXIT_FAILURE;

}

free(nu); free(S);

return EXIT_SUCCESS;

}

Fortran,C和Java中的解决方案需要中等时间(27秒,20秒,8秒).

我的问题是:我是否在上面犯了任何令人发指的错误(特别是C代码)?有没有办法加快Python例程?我很快意识到将数据存储在元组数组中比为每个条目实例化一个类要好.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值