<\/HEAD>
皆さん、こんにちは、<\/P>
<\/P>
私はシェイプファイル(.shp)から情報を読み取ろうとしていますが、ListFields()関数がファイルを読み取ろうとするときに少し問題に直面しています。このコードでは、ファイルを手動で渡してチェックしています。<\/P>
<\/P>
for <\/STRONG><\/SPAN>field <\/SPAN>in <\/STRONG><\/SPAN>arcpy.ListFields(<\/SPAN>"L:<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>historical_data<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko County<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer_Network_DBO_ssLateralLine.shp"<\/STRONG><\/SPAN>😞<\/span><\/SPAN><\/P><\/P>上記の行は「ファイルが存在しません」という例外をスローします。<\/P>この f = arcpy.ListFeatureClasses() は正しい値を返します。 <\/SPAN><\/PRE>興味深いことに、このコードはPythonのデスクトップ版では正常に動作します。しかし、同じコードをWeb版で実行しようとすると、上記のエラーが返されます。<\/SPAN>以下に関数全体のコードを示します:<\/SPAN><\/SPAN><\/P><\/P>def <\/STRONG><\/SPAN>connectSource(<\/SPAN>self<\/SPAN>, filepath):
<\/SPAN>"""
ファイルに接続し、フィーチャクラス:ShapeTypes とフィールド名:Type を保持する辞書データ構造を作成する
"""
<\/EM><\/SPAN>self<\/SPAN>.feature.clear()
listfield = <\/SPAN>list<\/SPAN>()
<\/SPAN>try<\/STRONG><\/SPAN>:
<\/SPAN># ワークスペースを接続ファイルに設定する
<\/EM><\/SPAN>arcpy.env.workspace = filepath
<\/SPAN># 全てのフィーチャのリストを取得する
<\/EM><\/SPAN>f = arcpy.ListFeatureClasses()
<\/SPAN>print<\/STRONG><\/SPAN>(f)
<\/SPAN>for <\/STRONG><\/SPAN>f1 <\/SPAN >in <\ /strong ><\ /span >f:
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; listfield[:] = []
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; i = <\ /span >0
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; <\ /span ># フィールドリストを繰り返す
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; <\ /span >print<\ /strong ><\ /span >(f1)
& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; for field in arcpy.ListFields("L:\\historical_data\\Elko County\\Elko_Sewer\\Elko_Sewer_Network_DBO_ssLateralLine.shp"):
& nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; print('ADC1')
& nb sp;; & nb sp;; & nb sp;; & nb sp;; & nb sp;; # フィルターフィールド
& nb sp;; if field.type not in ['OID']:
# and field.length < 51:
# フィールド名とフィールドタイプをリストに格納
listfield.insert(i, field.name + " " + field.type)
# リストをタプルに変換
hup = tuple(listfield)
i += 1
# 各フィーチャクラスのShape Typeを取得
type = arcpy.Describe(f1)
print("t" + type)
# Shape Typeでフィルター
if type.ShapeType == "Point":
# 各フィーチャクラスをキーとして、フィールド名(タプル)を値として辞書に格納
self.feature[f1, type.ShapeType] = hup
<\/SPAN>elif <\/STRONG><\/SPAN>type.ShapeType <\/SPAN>in <\/STRONG><\/SPAN>[<\/SPAN>'Polyline'<\/STRONG><\/SPAN>, <\/SPAN>'Line'<\/STRONG><\/SPAN>]:
<\/SPAN>self<\/SPAN>.feature[f1, type.ShapeType] = hup
<\/SPAN>except <\/STRONG><\/SPAN>Exception as <\/STRONG><\/SPAN>e:
<\/SPAN>print <\/STRONG><\/SPAN>(<\/SPAN>"Wrong file"<\/STRONG><\/SPAN>+e.message)
tkMessageBox.showerror(<\/SPAN>"Source File Connection"<\/STRONG><\/SPAN>, <\/SPAN>"Failed to connect to the file.{0} "<\/STRONG><\/SPAN>.format(e))
<\/SPAN>return <\/STRONG><\/SPAN>0<\/SPAN> <\/SPAN><\/SPAN><\/P><\/P>同じコードがweb形式では「ファイルが存在しません」という例外をスローします。一方、デスクトップ版では正常に動作します。 <\/SPAN><\/P><\/P>arcpy.ListFields(<\/SPAN>"L:<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>historical_data<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko County<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer<\/STRONG><\/SPAN>\\<\/STRONG><\/SPAN>Elko_Sewer_Network_DBO_ssLateralLine.shp")<\/STRONG><\/SPAN> <\/STRONG><\/SPAN><\/SPAN><\/P><\/P>このListFields()関数は値を返すことも読み取ることもできません。<\/SPAN><\/P><\/P>どこが間違っているのか教えてください。<\/SPAN><\/P><\/P>編集1:<\/SPAN><\/P><\/P>私はpython flaskアプリケーションを開発しようとしており、このコードブロックをHTMLファイルのボタンクリックから実行したいと考えています。<\/P>そのため、アプリケーションはhttp:\/\127.0.0.1\5000\で実行されており、そのボタンをクリックすると次の関数が実行されます。<\/P>そのボタンクリックで実行される関数は以下の通りです:<\/P>@app.route<\/SPAN >(<'strong'style='color : green ; font - size : 9 . 0 pt;'>'/open_file'< /strong>, methods[<'strong'style='color : green ; font - size : 9 . 0 pt;'> 'POST' ])
def open_file():
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath(<'strong'style='color : green ; font - size : 9 . 0 pt;'>'uploads/Elko_Sewer'))
& nbsp ; & nbsp ; & nbsp ; print(<'strong'style='color : green ; font - size : 9 . 0 pt;'>'END OPEN')
& nbsp ; & nbsp ; & nbsp ; return render_template(<'strong'style='color : green ; font - size : 9 . 0 pt;'>'view.html')< /span >
& nbsp ;
上記のコードではproce()関数にshpファイルから読み取るためのすべてのコードがあります。< /p >
& nbsp ;
興味深いことに、flaskアプリケーションのmain関数内でproce()を呼び出すと、本当に完璧に動作します。そしてデバッガーが起動する前にコードを実行し、デバッガーコンソールに出力を表示します。私はPyCharmを使って開発とデバッグをしています。< /p >
if __name__ == '__main__':
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath(<'strong'style='color : green;font - size :9 .0 pt;'>'uploads/Elko_Sewer'))
& nbsp ; & nbsp ; & nbsp ; app.run(
& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; debug=True)< /span >
< /p >
よろしくお願いします< /span >
Priyam< /span >
< /BODY >