我有一个csv文件,每行中都有随机数量的整数(至少1(,这些整数可能都是0,用逗号分隔。但最后15-30行(每次运行都不同,数据总是相同的长度(没有保存。我甚至添加了一个计数器来检查循环进行了多远,计数器达到了正确的值。这是作者的代码:
writer = csv.writer(open("one_hot_encoded.csv", 'w'))
counter=0
for row in data:
counter+=1
writer.writerow([counter,row])
print(counter)
这是csv文件中一行的示例:
57732;[012323570、4654、4154、8555、0]";
由于启动方式的原因,您的应用程序可能正在以可怕的方式死亡,而不是正常关闭。
这样可以防止Python刷新文件内容。
只需使用上下文管理器块("with"命令(打开文件即可防止这种情况发生:
with open("one_hot_encoded.csv", 'w') as file:
writer = csv.writer(file)
counter=0
for row in data:
counter+=1
writer.writerow([counter,row])
print(counter)
上下文管理器,例如with
语句所使用的上下文管理器可以确保在块结束后正确地终止资源。更常见的资源之一,通常显示为如何使用with
命令的示例,正是文件。块的末尾在文件的__exit__
方法下面进行Python调用,这反过来又会关闭文件。您也可以通过调用file.close()
而不使用with
块来显式执行此操作。
通常Python进程在终止时会删除对象,并且这个进程会导致所有打开的文件都被关闭,但这并不能保证发生,而且由于某种原因,这就是原始代码中发生的情况。
如果您更喜欢呼叫.close
,您可以执行以下操作:
writer = csv.writer(file:=open("one_hot_encoded.csv", 'w'))
counter=0
for row in data:
counter+=1
writer.writerow([counter,row])
file.close()
print(counter)
注意";海象操作员;(:=
(将打开的文件分配给";文件";变量作为参数传递给csv.writer
。