我编写了一个脚本,该脚本可获取比特币数据并将其保存在.txt文件中,或者在存在.txt文件的情况下,它将对其进行更新。 .txt文件是neo4j的节点和连接节点的关系。
脚本开头:
.txt文件不断打开,脚本将写入新数据。写入所有数据或终止执行时,.txt文件关闭。
我的问题是:
我应该为每个迭代和每个.txt文件打开,编写,关闭每个.txt文件吗?
或
我应该保持现在的样子吗?打开.txt文件,进行所有编写,完成编写后,关闭.txt文件
我正在保存6013个块中的数据。哪种方法可以最大程度地减少破坏.txt文件中写入的数据的风险?
答案 0 :(得分:0)
我认为保持文件打开效率会更高,因为python不需要在每次您想读写文件时都搜索并打开文件。
我猜应该看起来像这样
with open(filename, "a") as file:
while True:
data = # get data
file.write(data)
答案 1 :(得分:0)
运行一个基准测试,自己看看这种问题的典型答案。
尽管如此,打开和关闭文件确实要花钱。 Python需要为与文件关联的缓冲区和数据结构分配内存,并调用某些操作系统功能,例如open
系统调用,该系统调用将依次搜索缓存或磁盘中的文件。
另一方面,程序,用户,整个系统等可以同时打开的文件数量受到限制。例如,在Linux上,$.getJSON("https://sheets.googleapis.com/v4/spreadsheets/" + SpreadsheetID + "/values/Color1!A2:Q?key=<MY_API_KEY>", function(data) {
// data.values contains the array of rows from the spreadsheet. Each row is also an array of cell values.
$(data.values).each(function() {
var location = {};
location.title = this[2];
location.latitude = parseFloat(this[10]);
location.longitude = parseFloat(this[9]);
location.institution = this[3];
//location.hidden = <?>;
locations.push(location);
});
中的值表示内核将分配的最大文件句柄数。当您收到许多有关文件句柄用尽的错误消息时,您可能想增加此限制(source)。
如果您的程序在这样的限制性环境中运行,那么最好仅在需要时才打开文件。
答案 2 :(得分:0)
使文件保持打开状态将更快。在评论中,您提到“先前写入的数据丢失是不可选择的”。对于打开的文件,损坏文件的可能性更高,因此在每次迭代中打开和关闭文件更为可靠。 还有一个选项可以将数据保留在某个缓冲区中,并在接收到所有数据时或在用户/系统中断或网络超时时将缓冲区写入/追加到文件中。