<\/HEAD>
Ahoj všichni,<\/P>
<\/P>
Snažím se načíst nějaké informace ze souboru tvaru (.shp) a mám malý problém, když funkce ListFields() se pokouší soubor přečíst. Zde v tomto kódu ručně předávám soubor ke kontrole.<\/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>Výše uvedený řádek vyvolává výjimku s hlášením, že soubor neexistuje.<\/P>The f = arcpy.ListFeatureClasses() toto vrací správné hodnoty.<\/SPAN><\/PRE>Nyní zajímavá část je, že tento kód funguje dobře v desktopové verzi python kódu. A když se pokusím spustit stejný kód z webové verze, vrací výše uvedenou chybu.<\/SPAN>Celý kód funkce je uveden níže:<\/SPAN><\/SPAN><\/P><\/P>def <\/STRONG><\/SPAN>connectSource(<\/SPAN>self<\/SPAN>, filepath):
<\/SPAN>"""
Připojí se k souboru a vytvoří datovou strukturu slovníku, která bude obsahovat
feature classes:TvarTypy a názvy polí:Druh
"""
<\/EM><\/SPAN>self<\/SPAN>.feature.clear()
listfield = <\/SPAN>list<\/SPAN>()
<\/SPAN>try<\/STRONG><\/SPAN>:
<\/SPAN># nastavte pracovní prostor na připojovaný soubor
<\/EM><\/SPAN>arcpy.env.workspace = filepath
<\/SPAN># Získejte seznam všech prvků
<\/EM><\/SPAN>f = arcpy.ListFeatureClasses()
<\/SPAN>print<\/STRONG><\/SPAN>(f)
<\/SPAN>for <\/STRONG><\/SPAN>f1 <\/SPAN>in <\/STRONG><\/SPAN>f:
listfield[:] = []
i = 0
# Procházejte seznam polí
print(f1)
for field in arcpy.ListFields("L:\\historical_data\\Elko County\\Elko_Sewer\\Elko_Sewer_Network_DBO_ssLateralLine.shp")
print('ADC1')
# Filtr pole
if field.type not in ['OID']: # and field.length <amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;pgt;;51:
listfield.insert(i, field.name + "&nbs p ; " + field.type)
hup = tuple(listfield)
i += 1type = arcpy.Describe(f1)
print("t"+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>"Špatný soubor"<\/STRONG><\/SPAN>+e.message)
tkMessageBox.showerror(<\/SPAN>"Source File Connection"<\/STRONG><\/SPAN>, <\/SPAN>"Nepodařilo se připojit k souboru.{0} "<\/STRONG><\/SPAN>.format(e))
<\/SPAN>return <\/STRONG><\/SPAN>0<\/SPAN> <\/SPAN><\/SPAN><\/P><\/P>Stejný kód ve webovém formátu vyvolává výjimku, že soubor neexistuje. Zatímco v desktopové verzi běží perfektně. <\/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>Tato funkce ListFields() není schopna vrátit / přečíst hodnotu.<\/SPAN><\/P><\/P>Prosím, poraďte mi, kde dělám chybu.<\/SPAN><\/P><\/P>EDITACE 1:<\/SPAN><\/P><\/P>Snažím se vyvinout python flask aplikaci, kde chci, aby tento blok kódu byl spuštěn po kliknutí na tlačítko v HTML souboru.<\/P>Aplikace tedy běží na http:\/\127.0.0.1\5000\<\/A> a jakmile kliknu na toto tlačítko, následující funkce se spustí.<\/P>Následující funkce je spouštěna po kliknutí na toto tlačítko:<\/P>
@app.route<\/SPAN >(<'POST'>)
def open_file():
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath('uploads/Elko_Sewer'))
& nbsp ; & nbsp ; & nbsp ;
print('END OPEN')
& nbsp ; & nbsp ; & nbsp ; return render_template('view.html')
& nbsp ;
V uvedeném kódu má funkce proce() veškerý kód pro čtení ze shp souboru.< / p >
& nbsp ;
Zajímavé je, že když volám proce() v hlavní funkci flask aplikace, funguje to opravdu perfektně . A před aktivací debuggeru vykoná kód a vytiskne výstup do konzole debuggeru . Používám PyCharm pro vývoj a ladění .
if __name__ == '__main__':
& nbsp ; & nbsp ; & nbsp ; proce(os.path.abspath('uploads/Elko_Sewer'))
& nbsp ; & nbsp ; & nbsp ; app.run(
& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; )
S pozdravem
Priyam
< / body >< / html >