我打开几个文本文件(STL)并使用之前定义的两个函数对它们运行几个操作。准确地说,函数“point_stl”提取STL文件中包含的点的坐标,而函数“point_cloud”从STL文件中提取点而不重复。
with open(folder+"bone_set1.stl", "r") as f1, open(folder+"bone_set2.stl", "r") as f2:
var1 = point_stl(f1,f2)
var2 = point_cloud(f1,f2)
为什么看起来我不能使用两次变量f1和f2?如果我在第一个函数中使用它们,我在第二个函数中没有得到任何结果,反之亦然。
答案 0 :(得分:5)
您正在阅读point_stl
来电中的en文件。
解决方法是在加注point_cloud
之前将文件重新找回位置0:
with open(folder+"bone_set1.stl", "r") as f1, open(folder+"bone_set2.stl", "r") as f2:
var1 = point_stl(f1,f2)
f1.seek(0)
f2.seek(0)
var2 = point_cloud(f1,f2)
更好地理解:Python中文本文件的最常见用例是逐行读取,对每行上的数据进行操作 - 这可能是yoru代码在这些函数中的作用。问题是一个文件一旦打开,就会保持一个内部“指针”指向它被读取的位置,以及它将在下一次调用时从哪个地方继续读取。您的第一个函数可能是将文件读取到最后,指针位于文件的末尾。在调用第二个函数时,tehre没有什么可读的。
现在,操作系统文件访问具有这种“搜索”功能,允许将文件指针放在任意位置 - 对于文本文件,将它放在开头,结尾处或在先前存储的位置(在另一个变量中)。通过用“0”调用它,并抑制第二个(“whence”)参数,两个文件都被重新卷绕到开头。
答案 1 :(得分:4)
而不是传入文件指针,只需使用f.read()并传入文件内容
with open(folder+"bone_set1.stl", "r") as f1, open(folder+"bone_set2.stl", "r") as f2:
contentsf1 = f1.read()
contentsf2 = f2.read()
var1 = point_stl(contentsf1,contentsf2)
var2 = point_cloud(contentsf1,contentsf2)
答案 2 :(得分:2)
由于您直接传递文件处理程序,我假设每个函数都读取文件内容。
不幸的是,在第一个函数读取文件后,读取的游标位于文件末尾,第二个函数在游标和文件末尾之间无法读取。
我的建议是:
另一个解决方案是在第一次函数调用之后的文件中设置读取游标。