Python为什么在这段代码中使用open(filename)两次?
下面是第2章机器学习中的一段代码。 目标是将文件传输到matix。我不明白的是为什么我应该使用fr=open(filename)两次 当我删除第二个open(filename)时,代码只返回空白矩阵。我不明白为什么 非常感谢您抽出时间Python为什么在这段代码中使用open(filename)两次?,python,python-3.x,Python,Python 3.x,下面是第2章机器学习中的一段代码。 目标是将文件传输到matix。我不明白的是为什么我应该使用fr=open(filename)两次 当我删除第二个open(filename)时,代码只返回空白矩阵。我不明白为什么 非常感谢您抽出时间 def file2matrix(filename): fr = open(filename) numberOfLines = len(fr.readlines()) returnMat = zeros((numberOfLi
def file2matrix(filename):
fr = open(filename)
numberOfLines = len(fr.readlines())
returnMat = zeros((numberOfLines,3))
classLabelVector = []
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat,classLabelVector
它读取文件两次:
fr = open(filename)
numberOfLines = len(fr.readlines())
returnMat = zeros((numberOfLines,3))
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
...
fr = open(filename)
numberOfLines = len(fr.readlines())
returnMat = zeros((numberOfLines,3))
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
...
fr.readlines()
读取整个文件,因此无需再次读取该文件,结果(行列表)应存储在变量中,并在填充矩阵时重复使用
处理完文件后,还应调用
close()
。它将文件读取两次:
fr = open(filename)
numberOfLines = len(fr.readlines())
returnMat = zeros((numberOfLines,3))
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
...
fr = open(filename)
numberOfLines = len(fr.readlines())
returnMat = zeros((numberOfLines,3))
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
...
fr.readlines()
读取整个文件,因此无需再次读取该文件,结果(行列表)应存储在变量中,并在填充矩阵时重复使用
另外,处理完文件后,还应调用
close()
。使用readlines函数时,它会将所有行读取到内存中,最后文件指针位于文件的最末端
这样,如果您在使用它之后再次尝试读取,因为文件指针在末尾,它将从端到端读取,因此空白矩阵。
他们重新打开文件,使文件指针回到开头。另一种方法是filevariable.seek(0),它将文件指针移回起始位置,您应该能够再次使用readlines需要注意的一点是,readlines会将整个文件读入内存,如果您有一个大文件,则应该使用for循环,并使用readline一次读取一行。当您使用readlines函数时,它会将所有行读入内存,并且文件指针在文件的最后
这样,如果您在使用它之后再次尝试读取,因为文件指针在末尾,它将从端到端读取,因此空白矩阵。
他们重新打开文件,使文件指针回到开头。另一种方法是filevariable.seek(0),它将文件指针移回起始位置,您应该能够再次使用readlines需要注意的一点是,readlines将整个文件读取到内存中,如果您有一个大文件,则应使用for循环,并使用readline一次读取一行。现在建议在处理文件时始终使用上下文管理器。试试下面这个,它应该非常接近你要找的东西
def file2matrix(filename):
with open(filename, "r") as fr:
returnMat = zeros((len(fr.readlines,3))
classLabelVector = []
index = 0
for line in fr:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat,classLabelVector
现在建议在处理文件时始终使用上下文管理器。试试下面这个,它应该非常接近你要找的东西
def file2matrix(filename):
with open(filename, "r") as fr:
returnMat = zeros((len(fr.readlines,3))
classLabelVector = []
index = 0
for line in fr:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat,classLabelVector
可能重复的可能重复您还可以将枚举(行)中的i行的
索引=0
和索引+=1
更改为!我现在就试试!您还可以将i的索引=0
和索引+=1
更改为枚举(行)
行!我现在就试试!谢谢这对我帮助很大!谢谢这对我帮助很大!