[英]Iterating a conversion of a string to a float in a scripting file when parsing an old file
我正在使用新腳本(a)從舊腳本(b)提取信息以創建新文件(c)。 我正在尋找舊腳本(b)中的等號,並且想要修改修改腳本(a)以使其自動化。
字符串是lev1tolev2'from = e119-b3331l1 mappars =“ simp:180” targ = enceladus.bi.def.3 km = 0.6 lat =(-71.5,90)lon =(220,360)'用python 3編寫。
當前輸出固定在cam2map上,從= e119-b3331l1到= rsmap-x map = enc.Ink.map pixres = mpp defaultrange = MAP res = 300 minlat = -71.5 maxlat = 90 minlon = 220 maxlon = 360
目前,我的代碼能夠為lev1tolev2的所有迭代導出字符串0.6,但是每個迭代都會有所不同。
cam2map = Call("cam2map")
cam2map.kwargs["from"] = old_lev1tolev2.kwargs["from"]
cam2map.kwargs["to"] = "rsmap-x"
cam2map.kwargs["map"] = "enc.Ink.map"
cam2map.kwargs["pixres"] = "mpp"
cam2map.kwargs["defaultrange"] = "MAP"
**cam2map.kwargs["res"] = float((old_lev1tolev2.kwargs["km"]))**
cam2map.kwargs["minlat"] = lat[0]
cam2map.kwargs["maxlat"] = lat[1]
cam2map.kwargs["minlon"] = lon[0]
cam2map.kwargs["maxlon"] = lon[1]
我有兩個問題,為什么不將字符串轉換為浮點數? 而且,為什么這不像代碼中的其他所有命令一樣遍歷所有lev1tolev2命令?
完整代碼可在此處獲得。
對我來說似乎還不清楚,但是從您這里的語法:
**cam2map.kwargs["res"] = float((old_lev1tolev2.kwargs["km"]))**
我敢打賭,cam2map.kwargs [“ res”]是一個字典,而您認為它將使用**語法轉換字典中的每個值。 然后,應在dict的元素上循環調用內置的float,或者可能在此處進行列表理解:
cam2map.kwargs["res"] = dict()
for key, value in old_lev1tolev2.kwars["res"].items():
cam2map.kwargs["res"][key] = float(value)
編輯:好的,看來您是從字符串'from = e119-b3331l1 mappars =“ simp:180” targ = enceladus.bi.def.3 km = 0.6 lat =(-71.5,90)lon =(220,360)'然后以為調用youstring.kwargs會給你一個dict,但是不會,你可以先使用一些lib將其解析為一個dict,或者使用mystring.split('=')然后再處理你的首先是一個命令,像這樣:
output = dict()
for one_bit in lev_1_lev2.split(' '):
key, value = one_bit.split('=')
output[key] = value
該問題發生在代碼中的其他位置。 def escape_kw_value(value):
if not isinstance(value, str):
return value
elif (value.startswith(('"', "'")) and value.endswith(('"', "'"))):
return value
# TODO escape the quote with \" or \'
#if value.startswith(('"', "'")) or value.endswith(('"', "'")):
# return value
if " " in value:
value = '"{}"'.format(value)
return value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.