将print语句从循环中写入csv而不使用换行符

时间:2017-09-24 22:20:21

标签: python csv newline

我有一些代码,我想知道如何正确格式化并保存到csv文件。我还没有能够找到一个以我想要的方式回答这个问题的问题,而且因为我对python很新,所以我在更改代码时遇到了麻烦,因为代码回答类似的问题而不适合我的需要。

它分解为以下内容:

assets = [asset_1, asset_2, asset_3]
for i in range(len(assets)):
    price = data.current(assets[i], "price")

现在,如果我

print price

打印为

price 1
price 2
price 3

我可以毫不费力地将其打印为price 1, price 2, price 3,但是对于我来说,print price[0], price[1], price[2], newline这样的内容似乎非常笨拙,特别是当我希望将来将其扩展到更多资产时。我遇到的所有解决方案都删除了新行,然后导致price1, price2, price3, price1, price2...我希望新行专门在价格3之后发生。我也能够将数据导出到csv而不会出现问题,但csv只有一列类似于第一个print语句。如何将3种价格中的每一种都变成csv然后再换行?

我尝试按照this回答,并更改了我的打印语句,但在尝试打印时,语法错误[index]索引在我的情况下为0:2(尝试1:3 in案件,但没有按预期工作)

这是我的实际代码。

from catalyst.api import record, symbol, symbols
from datetime import datetime
import os, csv, pytz, sys
import catalyst


def initialize(context):

    # Portfolio assets list
    context.assets = [symbol("XMR_DASH"), symbol("BTC_XMR"), symbol("BTC_DASH")] 

    '''
    # Creates a .CSV file with the same name as this script to store results
    context.csvfile   = open(os.path.splitext(os.path.basename(__file__))[0]+'.csv', 'w+')
    context.csvwriter = csv.writer(context.csvfile)
    '''


def handle_data(context, data):

    date = context.blotter.current_dt # Current time for each iteration in the simulation
    price = data.current(context.assets, "price") 
    print price

    '''
    for i in range(0,3):
        price = data.current(context.assets[i], "price") 
        print price[any index gives syntax error]
    '''

def analyze(context=None, results=None):
    pass
    '''
    # Close open file properly at the end
    context.csvfile.close()
    '''


start = datetime(2017, 7, 30, 0, 0, 0, 0, pytz.utc)
end = datetime(2017, 7, 31, 0, 0, 0, 0, pytz.utc) 
results = catalyst.run_algorithm(start=start, end=end, initialize=initialize, 
                                 capital_base=10000, handle_data=handle_data, 
                                 bundle='poloniex', analyze=analyze, data_frequency='minute')

我不需要帮助将数据写入csv,但需要帮助格式化写入的数据。最好是答案也适用于印刷语句,这样我就可以看到在进入csv之前发生了什么。

2 个答案:

答案 0 :(得分:0)

您可以这样简单地打印数组:

assets = [asset_1, asset_2, asset_3]
print(","join([str(data.current(assets[i], "price")) for i in assets]))
  • ",".join(array)使用值之间的逗号连接数组。打印将打印连续数组,最后添加换行符

  • [str(data.current(assets[i], "price")) for i in assets]构建您要连接的价格数组

答案 1 :(得分:0)

尝试更改以下内容..

for i in range(0,3):
    price = data.current(context.assets[i], "price") 
    print price[any index gives syntax error]

price=[]
for i in range(0,3):
    price.append(data.current(context.assets[i], "price"))
print(','.join([str(x) for x in price])

我所面临的问题是,我认为价格是一个浮动/双/ int而不是价格清单。因此任何价格指数都会失败。现在我们创建了一个价目表。