【问题标题】:Writing to a file efficiently after prediction python在预测python之后有效地写入文件
【发布时间】:2020-11-25 05:31:13
【问题描述】:

我对编程比较陌生,正在努力减少将数据写入文件所需的时间,我发现写入部分是主要问题。

以下是我的机器学习程序代码的一部分:

filename="data.csv"
f=open(filename,"w")
headers="row,open\n"
f.write(headers)

for i in range (0,55970):
    score=rf.predict(edit[i].reshape(1, -1))
    score=str(score).replace('[','').replace(']','')
    f.write(str(i) +","+ score +"\n")
    
f.close()

我知道我应该在获得所有数据之后才写入数据,但我不知道如何去做——因为我只知道 f.write()。我是否为我的预测和返回分数创建一个函数,然后创建一个列表来存储所有分数并将其写入? (如果可能的话)

[编辑]

score=rf.predict(edit)
with open('data.csv', 'w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['row', 'open'])
    for i in range(55970):
        writer.writerow([i,str(score[i])])

^ 根据新建议添加。发现我应该只做预测,然后写出显着缩短时间的行!

感谢您的帮助!!

【问题讨论】:

  • 使用+ 连接字符串效果不佳,因为它会导致不必要地创建新字符串,然后将其丢弃,应该避免。字符串格式化和在字符串列表或可迭代字符串上使用join() 是首选方法

标签: python file processing-efficiency


【解决方案1】:

CSV 模块是一个更好的工具。更具体地说,writerows() 就是您要查找的内容。

https://docs.python.org/3/library/csv.html#csv.csvwriter.writerows

这是文档中的一个示例:

import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)

import csv

with open('data.csv', 'w') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(['row_id', 'open_flag'])
    for i in range(55970):
        score = str(rf.predict(edit[i].reshape(1, -1)))
        score.replace('[', '').replace(']', '')
        writer.writerow([i, score])

【讨论】:

  • 感谢您的建议,但我不确定如何有效地创建一个可迭代的输入数据。我已经编辑了我的原始问题以添加我尝试使用 writerows() 的新代码。
  • @arangard 我为你更新了我的答案。您不需要编译数据然后一次全部写入。我推荐了writerows,因为您措辞原始问题的方式。测试我现在给出的示例,如果您仍然需要帮助,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2016-11-25
  • 2014-01-26
  • 1970-01-01
  • 2020-12-31
  • 2019-05-24
  • 2015-11-05
相关资源
最近更新 更多