【问题标题】:Python, for loopPython,for循环
【发布时间】:2017-11-02 10:45:41
【问题描述】:

我有以下代码:

def get_asset_info(asset_list):

    import datetime

    today = datetime.datetime.today()
    day = today.strftime("%d")

    for i in range( len( asset_list )):
        raw_info = get_OHLC( asset_list[i], 15, get_server_time() )

        info = raw_info['result'][asset_list[i]]
        head = "time,open,high,low,close,vwap,volume,count"

        formatted_info = ""

        for i in range(len(info[0])):
            formatted_info = formatted_info + info[0][i] + ","

        file = open(asset_list[i]+"_"+day, "a")
        file.write(head + "\n")
        file.write(formatted_info)
        file.close()

它应该获取一些值,将其转换为字符串并将其写入文件,动态生成。 它不是这样工作的,所有值都放在同一个文件中。

如果我像下面这样更改代码的最后一部分,则会生成文件:

    formatted_info = str(info[0][0]) + "," + str(info[0][1]) + "," + str(info[0][2]) + "," + str(info[0][3]) + "," + str(info[0][4]) + "," + str(info[0][5]) + "," + str(info[0][6]) + "," + str(info[0][7])

    file = open(asset_list[i]+"_"+day, "a")
    file.write(head + "\n")
    file.write(formatted_info)
    file.close()

因此,正如我所见,问题出在我为生成字符串而创建的 for 循环中,但没有任何意义,因为生成文件的代码不在同一个循环中。

有什么想法吗?

【问题讨论】:

  • 缩进你的文件写入块,否则它只会写出formatted_info的最后一个实例
  • 您对内循环和外循环使用相同的变量i。使用不同的变量。
  • 完全摆脱内部循环是可能的,只需使用这个:formatted_info = ",".join(info[0]) + ","

标签: python python-3.x file for-loop


【解决方案1】:
for i in range( len( asset_list )):
    ...
    for i in range(len(info[0])):
        ...
    # now what do you think i is now?
    file = open(asset_list[i]+"_"+day, "a")

将第二个 i 更改为 j 应该可以解决问题:

for i in range( len( asset_list )):
    ...
    for j in range(len(info[0])):
        formatted_info = formatted_info + info[0][j] + ","

    file = open(asset_list[i]+"_"+day, "a")

甚至更好:

for i in range( len( asset_list )):
    ...
    for piece in info[0]:
        formatted_info = formatted_info + str(piece) + ","

    file = open(asset_list[i]+"_"+day, "a")

或者最终更好:

for i in range( len( asset_list )):
    ...
    formatted_info = ','.join(str(obj) for obj in info[0]) + ','
    file = open(asset_list[i]+"_"+day, "a")

【讨论】:

  • 第一个代码没问题,第二个必须像这样使用:for piece in info[0]: formatted_info = formatted_info + str(piece) + "," 第三个,灾难。非常感谢
  • @Frey 好吧,您的原始代码中没有 str 表明这些数组包含字符串。无论如何,我已经更新了答案。
  • 这是一种优雅的做事方式。刚刚复制的时候忘记修改代码了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2021-10-15
  • 1970-01-01
相关资源
最近更新 更多