【问题标题】:Writing print statements to csv from loops without newlines从没有换行符的循环中将打印语句写入 csv
【发布时间】:2018-03-05 20:17:09
【问题描述】:

我有一些代码,想知道如何正确格式化并保存到 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只有一列类似于第一个打印语句。如何将 3 个价格中的每一个都放入 csv 然后换行?

我尝试遵循this 的答案,并更改了我的打印语句以效仿,但在我的情况下尝试打印价格 [index] 索引时出现语法错误,我的情况是 0:2(尝试 1:3 以防万一但没有按预期工作)

这是我的实际代码。

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 之前可视化正在发生的事情。

【问题讨论】:

    标签: python csv newline


    【解决方案1】:

    您可以通过这种方式简单地打印数组:

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

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

    【讨论】:

    • data.current(assets[i], "price") 需要转换为str??
    • 也许,也许不是。取决于 csv 中的“价格”数据是什么。 csv 通常以文本输出的形式出现,需要将其转换为 int 或 float 才能转换为数字。但是是的,好的,以防万一,将其转换为字符串是安全的。
    • 太好了,这对我有用。非常感谢您的帮助和快速响应。我如何将其标记为已关闭,就像我看到的其他问题一样?
    【解决方案2】:

    尝试更改以下内容..

    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])
    

    我认为您面临的问题是价格是单个浮点数/双精度数/整数,而不是价格列表。因此,任何价格指数都会失败。现在,我们创建了一个价目表。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2021-01-01
      • 2021-04-30
      • 1970-01-01
      • 2021-11-09
      相关资源
      最近更新 更多