python 内存、刷新、csv 大小的问题

Problem with python memory, flush, csv size

在解决了一个数据集的排序之后,我的代码在这一点上遇到了问题。

with open(fns_land[xx]) as infile:
    lines = infile.readlines()
    for line in lines:
        result_station.append(line.split(',')[0])
        result_date.append(line.split(',')[1])
        result_metar.append(line.split(',')[-1])

我的线条有问题。在这一行中,数据有时会很大,我会收到终止错误。

有没有short/nice方法来重写这一点?

改用readline,这样一次读取一行而不会将整个文件加载到内存中。

with open(fns_land[xx]) as infile:
    while True:
        line = infile.readline()
        if not line:
            break
        result_station.append(line.split(',')[0])
        result_date.append(line.split(',')[1])
        result_metar.append(line.split(',')[-1])

如果您正在处理数据集,我建议您看一下 pandas,我非常适合处理数据整理。

如果您的问题是大型数据集,您可以分块加载数据。

import pandas as pd
tfr = pd.read_csv('fns_land{0}.csv'.format(xx), iterator=True, chunksize=1000)
  1. 行:导入pandas模块
  2. 行:以 1000 行为单位从您的 csv 文件中读取数据。

这将是 pandas.io.parsers.TextFileReader 类型。要加载整个 csv 文件,您需要跟进:

df = pd.concat(tfr, ignore_index=True)

增加参数ignore_index=True避免索引重复

您现在已将所有数据加载到数据框中。然后将列作为向量进行数据操作,这也比常规的逐行更快。

看看这里 处理类似的东西。