أكثر

ما الذي يسبب ValueError: عملية الإدخال / الإخراج في ملف مغلق؟

ما الذي يسبب ValueError: عملية الإدخال / الإخراج في ملف مغلق؟


أحصل على رسالة الخطأ التالية:

ValueError: عملية الإدخال / الإخراج في ملف مغلق

ها هو الكود الخاص بي (يحدد كل مضلع مضمن في ملف الأشكال "selected_polygons.shp" ويبني المسار الأقل تكلفة بين المضلع المحدد مسبقًا وكل مضلع مضمن في نفس ملف الأشكال)

استيراد arcpy من arcpy استيراد env من arcpy.sa import * arcpy.CheckOutExtension ("Spatial") arcpy.env.overwriteOutput = True arcpy.env.workspace = "C:  Users  LCP" arcpy.env.extent = "costn. tif "مع arcpy.da.SearchCursor (" selected_polygons.shp "، (" * ")) كـ rowsInPatches_start: من أجل rowStart in rowsInPatches_start: ID_patch_start = int (rowStart [3]) ## تحديد تعبير SQL للوظيفة حدد الطبقة حسب السمة التعبير "تكاليف n.tif"، ""، "outCostLink.tif") ## حفظ الإخراج outCostDist.save ("outCostDist.tif") باستخدام arcpy.da.SearchCursor ("selected_polygons.shp"، ("*")) كـ rowsInSelectedPatches_end: للصف والنهاية في الصفوف InSelectedPatches_end: ID_patch_end = int (rowEnd [3]) ## تحديد تعبير SQL للصفوف e fonction حدد Layer By Attribute expressionForSelectInPatches_end = "GRIDCODE =٪ s"٪ (ID_patch_end) ## العملية: حدد الطبقة حسب السمة في Patches_end arcpy.MakeFeatureLayer_management ("selected_polygons.shp"، "Selected_patch_end"، التعبير outCostPath = CostPath ("Selected_patch_end"، "outCostDist.tif"، "outCostLink.tif"، "EACH_ZONE"، "FID") ## حفظ الإخراج outCostPath.save ('P_' + str (int (ID_patch_start)) + ' _ '+ str (int (ID_patch_end)) + ".tif") ## اكتب في ملف .txt outfile = open (' P_ '+ str (int (ID_patch_start)) +' _ '+ str (int (ID_patch_end) ) + ".txt"، "w") rowsTxt = arcpy.SearchCursor ('P_' + str (int (ID_patch_start)) + '_' + str (int (ID_patch_end)) + ".tif") لـ rowTxt في صفوف TXT : value = rowTxt.getValue ("Value") count = rowTxt.getValue ("Count") pathcost = rowTxt.getValue ("PATHCOST") startrow = rowTxt.getValue ("STARTROW") startcol = rowTxt.getValue ("STARTCOL" ) print value، count، pathcost، startrow، startcol outfile.write (str (value) + "" + str (count) + "" + str (pathcost) + "" + str (startrow) + "" + str (startcol) + " n") outfile.close ()

سبب حصولك على هذا الخطأ بالتحديد هو أنك تغلق ملفك بعد التكرار الأول من خلال الحلقة التالية:

لـ rowTxt في الصفوف Txt: value = rowTxt.getValue ("Value") count = rowTxt.getValue ("Count") pathcost = rowTxt.getValue ("PATHCOST") startrow = rowTxt.getValue ("STARTROW") startcol = rowTxt.getValue ("STARTCOL") قيمة الطباعة ، العدد ، المسار ، البداية ، startcol outfile.write (str (القيمة) + "" + str (count) + "" + str (pathcost) + "" + str (startrow) + "" + str (startcol) + " n") outfile.close ()

في التكرار التالي ، تقوم باستدعاء التابع write على ملف قمت بإغلاقه للتو. تحتاج إلى نقل عبارة outfile.close () خارج تلك الحلقة:

لـ rowTxt في الصفوف Txt: value = rowTxt.getValue ("Value") count = rowTxt.getValue ("Count") pathcost = rowTxt.getValue ("PATHCOST") startrow = rowTxt.getValue ("STARTROW") startcol = rowTxt.getValue ("STARTCOL") قيمة الطباعة ، العدد ، المسار ، البداية ، startcol outfile.write (str (القيمة) + "" + str (count) + "" + str (pathcost) + "" + str (startrow) + "" + str (startcol) + " n") outfile.close ()

المسافة البادئة خاطئة لحلقة for الأولى ، جرب هذا:

استيراد arcpy من arcpy import env من arcpy.sa import * arcpy.CheckOutExtension ("Spatial") arcpy.env.overwriteOutput = True arcpy.env.workspace = r "C:  Users  LCP" arcpy.env.extent = "costn .tif "مع مؤشر arcpy.da.SearchCursor (" selected_polygons.shp "، (" * ")) كصفوف InPatches_start: للصف ابدأ في صفوف InPatches_start:

شاهد الفيديو: وحدات الادخال والاخراج للصف الثالث