0

如果这是一个蹩脚的问题,我真的很抱歉,但我认为这可能会帮助其他人从 C 到 Python 进行同样的过渡。我有一个程序,我开始用 C 编写,但我认为最好用 Python 编写,因为它让我的生活更轻松。

我的程序从 Yahoo! 检索盘中股票数据!财务并将其存储在结构中。由于我已经习惯了 CI 编程,因此通常会尝试以艰难的方式做事。我想知道将数据存储为有组织的方式的最“Pythonesque”方式是什么。我在想一组元组?

这是我的一些 C 程序。

// Parses intraday stock quote data from a Yahoo! Finance .csv file. 
void parse_intraday_data(struct intraday_data *d, char *path)
{
    char cur_line[100];
    char *csv_value;
    int i;

    FILE *data_file = fopen(path, "r");

    if (data_file == NULL)
    {
        perror("Error opening file.");
        return;
    }

    // Ignore the first 15 lines.
    for (i = 0; i < 15; i++) 
        fgets(cur_line, 100, data_file);

    i = 0;

    while (fgets(cur_line, 100, data_file) != NULL) {
        csv_value = strtok(cur_line, ",");
        csv_value = strtok(NULL, ",");
        d->close[i] = atof(csv_value);

        csv_value = strtok(NULL, ",");
        d->high[i] = atof(csv_value);

        csv_value = strtok(NULL, ",");
        d->low[i] = atof(csv_value);

        csv_value = strtok(NULL, ",");
        d->open[i] = atof(csv_value);

        csv_value = strtok(NULL, "\n");
        d->volume[i] = atoi(csv_value);

        i++;
    }

    d->close[i] = 0;
    d->high[i] = 0;
    d->low[i] = 0;
    d->open[i] = 0;
    d->volume[i] = 0;
    d->count = i - 1;
    i = 0;

    fclose(data_file);
}

到目前为止,我的 Python 程序像这样检索数据。

response = urllib2.urlopen('https://www.google.com/finance/getprices?i=' + interval +     '&p=' + period + 'd&f=d,o,h,l,c,v&df=cpct&q=' + ticker)

问题是,在 Python 中存储这些数据的最佳或最优雅的方式是什么?

4

3 回答 3

2

把事情简单化。阅读该行,用逗号分隔,并将值存储在 ( named)tuple中。struct这与在 C中使用 a 非常接近。

如果您的程序变得更复杂,则可能(!)用一个类替换元组是有意义的,但不是立即。

这是一个大纲:

from collections import namedtuple
IntradayData = namedtuple('IntradayData',
        ['close', 'high', 'low', 'open', 'volume', 'count'])

response = urllib2.urlopen('https://www.google.com/finance/getprices?q=AAPL')
result=response.read().split('\n')
result = result[15 :] # Your code does this, too. Not sure why.

all_data = []
for i, data in enumerate(x):
    if data == '': continue
    c, h, l, o, v, _ = map(float, data.split(','))
    all_data.append(IntradayData(c, h, l, o, v, i))
于 2013-07-23T07:37:05.967 回答
0

Pandas ( http://pandas.pydata.org/pandas-docs/stable/ ) 特别适合这个。Numpy 的级别稍低,但也可能适合您的目的。不过,我真的建议走熊猫路线。无论哪种方式,您都不应该损失太多 C 的速度,所以这是一个优点。

于 2013-07-23T07:28:20.893 回答
0

我相信这取决于您在检索数据后想要进行多少数据操作。例如,如果您打算只在屏幕上打印它们,那么一个元组数组就可以了。

但是,如果您需要能够排序、搜索和其他类型的数据操作,我相信自定义类会有所帮助:然后您将使用自定义对象的列表(甚至是自制容器),允许您根据您的需要轻松添加自定义方法。

请注意,这只是我的意见,我不是高级 Python 开发人员。

于 2013-07-23T07:24:46.487 回答