我正在尝试一些很简单的事情,但我有一个问题我不明白。 基本上我有一个文件,里面有这个表格的文本
Text Accuracy: 0.568221 F1 = 22 recall=0.54
with paramters A=xxx B=11 C=222...
=============================
Text Accuracy: 0.568221 F1 = 22 recall=0.54
with paramters A=xxx B=11 C=222...
=============================
Text Accuracy: 0.568221 F1 = 22 recall=0.54
with paramters A=xxx B=11 C=222...
=============================
Text Accuracy: 0.568221 F1 = 22 recall=0.54
with paramters A=xxx B=11 C=222...
=============================
Text Accuracy: 0.568221 F1 = 22 recall=0.54
with paramters A=xxx B=11 C=222...
=============================
我要做的是把精度在0.90以上的所有3行块写入另一个文件。 为了浏览这些行,我使用了here提出的解决方案。 我的代码如下:
with open('G:\Mayeul\Distribution images\Features_importance\LogDecisionTree.txt') as oldfile, open('G:\Mayeul\Distribution images\Features_importance\LogDecisionTree2.txt', 'w') as newfile:
#print(len(oldfile.readlines()))
for line in range(1,int(len(oldfile.readlines()))):
print(line)
if line%3==0:
f=oldfile.readlines()[line-2]
f=f.split(' ')[3]
if int(f)>0.90:
newfile.write(oldfile.readlines()[line-2])
newfile.write(oldfile.readlines()[line-1])
newfile.write(oldfile.readlines()[line])
从这里开始我有两个问题我不明白。。。 第一个是
f=oldfile.readlines()[line-2] IndexError: list index out of range
我不明白,当我打印长度是13599,我的模数是3-2=1,没有负数的行
我以前从未遇到的第二个问题是,当我取消对print(len(oldfile.readlines()))
行的注释时,当它打印值时,我没有任何错误,但随后停止而不做任何操作。这就像打印正在终止程序,因为它没有进入for循环….
泰铢
你没有理由在这里加载整个文件在内存中。如果以后要处理大文件,可能会导致无用的资源问题。您只需保留3行:
不能多次使用oldfile.readlines()
而不是将文件的内容赋给变量,如下所示:
并使用此变量而不是代码中的
oldfile.readlines()
readlines()
将文件指针提前到文件的末尾,因此任何进一步的调用都不会产生任何结果,除非同时放大文件。相反,将所有行读入内存(使用the iterator protocol),然后索引。此外,您的解析不正确相关问题 更多 >
编程相关推荐