Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在预测python之后高效地写入文件_Python_File_Processing Efficiency - Fatal编程技术网

在预测python之后高效地写入文件

在预测python之后高效地写入文件,python,file,processing-efficiency,Python,File,Processing Efficiency,我对编程相当陌生,正在努力减少将数据写入文件所需的时间,我发现编写部分是主要问题 以下是我的机器学习程序代码的一部分: 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

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

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

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])])
^根据新建议添加。发现我应该只做预测,然后写行,这大大缩短了所花的时间


谢谢你的帮助

CSV模块是一个更好的工具。更具体地说,
writerows()
是您需要的

以下是文档中的一个示例:

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


使用
+
连接字符串的效果很差,因为它会导致不必要地创建新字符串,这些新字符串将被丢弃,应该避免。字符串格式设置和在字符串列表或iterable上使用
join()
是首选方法感谢您的建议,但我不确定如何高效地创建iterable来输入数据。我已经编辑了我的原始问题,添加了我使用writerows()尝试过的新代码。@arangard我为您更新了我的答案。您不需要编译数据,然后一次性将其全部写入。我推荐了
writerows
,因为你对原始问题的措辞方式。测试我现在给出的示例,如果您仍然需要帮助,请告诉我。
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])