以某种形式存储打印数据的最佳选择

2024-04-24 22:40:24 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一些csv数据,我需要从这个数据是两个领域,然后我会做一些计算,使用收盘价,有两个以上的领域,并打印这四个领域在一定的格式。你知道吗

我在考虑用这两个字段创建namedtuples,然后在计算完后将其他两个字段的值相加。namedtuples是否最好将其格式化为这种格式,另一个选项是否更像dicts或list?你知道吗

如果使用namedtuples是正确的方法,那么如何仅使用数据中的两个字段和可以添加值的两个字段来创建namedtuples,但是通过在数据上使用splitlines()然后创建namedtuples,可以使用所有字段来创建namedtuples。你知道吗


Tags: csv数据方法格式选项领域listdicts
3条回答

使用类。。。接吻。你知道吗

class ShareData:

    def __init__(self, date, open_price, high_price, low_price, close_price, 
        volume, adj_close):

        self.date = date
        self.open_price = open_price
        self.high_price = high_price
        self.low_price = low_price
        self.volume = volume
        self.adj_close = adj_close

        # your code to set these here.. or set them None and do it later
        self.indicator = None
        self.signal = None
        return

我会使用词典列表“命名元组”类似于一个结构或类,因此,在创建命名元组时需要知道属性是什么。另外,由于没有用于此特殊结构的getter/setter方法,因此命名tuple是不可变的。这使得它不适合您的代码。当您想从命名元组中添加或删除属性时,您将怎么做?你知道吗

在我看来,命名元组就像元组一样,它的额外优点是使代码更具可读性。因此,如果元组不是任务的数据结构,那么使用命名元组就没有任何意义。你知道吗

// When you only extracts the "DATA" and "CLOSE" attributes, store each row as a dict
d1={"DATE":"2011-11-11", "CLOSE":570.00}
d2={"DATE":"2011-11-12", "CLOSE":580.00}
....
d = [d1, d2]
....
// When you want to add extra attributes to each row, just modify that row
d[0]["INDICATOR"]=560.00
d[1]["SIGNAL"]="SELL"
....

I was thinking of creating namedtuples with 'date' and 'close' fields with the data and then adding the values of 'indicator' and 'signal' once I calculate it.

你不能

如果您真的需要动态添加任意属性的属性样式访问,那么方法是使用从object派生的普通旧类。这正是类实例在默认情况下所做的。你知道吗

除此之外,namedtuple还添加了一组固定的字段,作为每个namedtuple类的一部分,这些字段可以通过索引和名称进行访问。如果以后要添加新字段,则不希望将其修复。所以,不要使用namedtuple。你知道吗

但是,我认为您既不需要属性访问,也不需要索引访问;您真正需要的是键控访问。换句话说,一个dict。你知道吗

如果您使用stdlib中的^{}模块,而不是尝试使用splitlines并手动解析内容,那么这不仅简单,而且非常简单。例如:

with open('input.csv', 'rb') as f:
    d = list(csv.DictReader(f))

for thing in d:
    # whatever you want, including setting thing['Indicator'], etc.

with open('output.csv', 'wb') as f:
    writer = csv.DictWriter(f, ('Date', 'Close', Indicator', 'Signal').
                            extrasaction='ignore', delimiter='\t')
    writer.writerows(d)

相关问题 更多 >