Daugiau

Klaida su mano python scenarijumi

Klaida su mano python scenarijumi


Bandau parašyti eilutę, reikalaujančią klaidų žurnalo. Štai klaida, kurią gaunu:

„Python“ išimtis : [Errno 22] netinkamas režimas („r“) arba failo pavadinimas: „C:VartotojaiKyleDokumentaiPASIENISProject1_varasett2frogsV2Frogs_detaillog_20151110_142249916000.txt "

„FMEMacro DETAIL LOG“ yra tas failo vardas. Aš nesu didžiausias pitone ir turiu problemų bandydamas išsiaiškinti, kur aš suklydau.

Naudojamos programos yra FME ir „ArcMap 10.3“

Čia yra visas scenarijus:

import fme import sys import fmeobjects import data time import time # Šablono funkcijos sąsaja: def processFeature (feature): endstamp = datetime.datetime.now () endstamp = endstamp.strftime ("% Y-% m-% d% H:% M :% S.% f ") dataset_list = feature.getAttribute ('DATABASE_NAME'). Split (',') dataset_list = list (set (dataset_list)) dataset_list.sort () dataset_list = ',' .join (dataset_list) # Perskaitykite išsamios informacijos žurnalą ir išskleiskite suvestinės duomenis naudodami „open“ (FME_MacroValues ​​['DETAIL_LOG'], "r"): ins_count = 0 insert_count = 0 update_count = 0 redundant_count = 0 error_count = 0 action_list = [] merged_list = [] ins: line_array = line.split ('::') line_action = line_array [3] .replace (' n', ") action_list.append (line_action) if line_action.upper () == 'delete': delete_count + = 1 elif line_action.upper () == 'insert': insert_count + = 1 elif line_action.upper () == 'update': update_count + = 1 elif line_action.upper () == 'nereikalingas': redundant_count + = 1 elif line_action.upper () == 'klaida': error_count + = 1 # Sukurti el. Laiško turinį / santrauką (įskaitant detalių žurnalo vietą) email_body = "TAI VYKSTA VYKDYTI - NEBUVO ĮRENGTA JOKIŲ RAŠYTOJŲ  n" email_body + = "Pradėti:  t" + FME_MacroValues ​​['Laikas'] + " n "email_body + =" Finish:  t "+ endstamp +"  n  n "email_body + =" Įterpta:  t "+ str (insert_count) +"  n "email_body + =" Atnaujinta:  t "+ str (update_count) + " n" email_body + = "Ištrinta:  t" + str (delete_count) + " n" email_body + = "Redundant:  t" + str (redundant_count) + " n" email_body + = " Klaidos:  t  t "+ str (error_count) +"  n  n "# Siųsti el. Laišką su išsamios informacijos žurnalu kaip priedą # Išvesties atributai derinant funkciją.setAttribute ('body', email_body)

Taip, FME naudoja vidinę kodavimo sistemą (mes ją vadiname „Ką darytų Juanas“, nes Juanas yra mūsų XML ekspertas).

pagalvok ką turite padaryti, tai taikyti metodą decodeFromFMEParsableText. Nesu programavimo ekspertas, todėl pateiksiu turimą informaciją ir tikiuosi, kad tai padės, arba kas nors čia gali padėti.

Tai gavau iš API dokumentacijos (žr. C: apps FME fmeobjects python apidoc Index.html)


„Fmeobjects“ modulis :: „Class FMESession“

Metodas: decodeFromFMEParsableText (parsableText)

Šis metodas atlieka „unicode“ eilutės modifikavimą iš palyginamojo FME užkoduoto teksto atgal į nekoduotą. Pavyzdžiui, „bus pakeista“; Jei nepavyksta dekoduoti tam tikros simbolių sekos, gautas išvestis išlaikys tą simbolių seką.

Parametrai:

parsableText (string arba unicode) - FME užkoduotas tekstas kaip eilutė arba unicode.

Grąžina: unicode Nekoduotas tekstas kaip unicode.


Mano kolega sako, kad norėsite padaryti kažką panašaus:

session = fmeobjects.FMESession () decoded = session.decodeFromFMEParsableText (WWJDStringVAR)

Taigi spėju:

session = fmeobjects.FMESession () decoded = session.decodeFromFMEParsableText (FME_MacroValues ​​['DETAIL_LOG']) with open (decoded, "r") in ins:

C:VartotojaiKyleDokumentaiPASIENISProject1_varasett2frogsV2Frogs_detaillog_20151110_142249916000.txt "yra neteisingas kaip kelias. Atrodo, kad tam tikri simboliai keičiami žodžiais. Aš nieko nežinau apie „FMEMacro DETAIL LOG“, bet dirbdami galite pabandyti maždaug taip:

pathName = FME_MacroValues ​​['DETAIL_LOG'] fixedPathName = pathName.replace ("","  "). pakeisti (""," - ") su open (fixedPathName," r ") kaip ins:…

Aukščiau pateiktas kodas pakeičia žodžius tinkamais jų simboliais. Papildyti.replace ()kaip reikia.