2017-05-30 91 views
0

我有以下代码不支持的格式字符?

import urllib.request 

niveau_zoom_satellite = 0.0001389 


def Image(coordinates, image_size, name): 


    d1 = "http://eumetview.eumetsat.int/geoserv/wms?LAYERS=overlay%3Ane_10m_coastline%2Coverlay%3Ane_10m_admin_0_boundary_lines_land&STYLES=&TRANSPARENT=TRUE&FORMAT=image%2Fpng8&VERSION=1.3.0&TILED=true&EXCEPTIONS=INIMAGE&SERVICE=WMS&REQUEST=GetMap&CRS=EPSG%3A4326&BBOX=47.640001058578,3.520001411438,48.880001068115,4.7600014209747&WIDTH=256&HEIGHT=256" % \ 
       (niveau_zoom_satellite, 
       coordinates[0], 
       coordinates[1], 
       image_size[0]/2, 
       image_size[1]/2, 
       image_size[0], 
       image_size[1]) 
    for line in urllib.request.urlopen(d1): 
     if line.startswith("<td align=left><input type=image src="): 
      d2 = "http://http://eumetview.eumetsat.int/%s" % (line.split("\"")[1],) 
      break 
    urllib.request.urlretrieve(d2, name) 


if __name__ == '__main__': 
    Image((4.37337, 47.43572), (256, 256), "test.jpg") 

,问题是

ValueError: unsupported format character 'A' (0x41) at index 58

+0

什么线引发错误? – IsaacDj

+0

什么行?我怀疑你需要躲避字符串中的''%作为这样一个问题:https://stackoverflow.com/questions/8856523/valueerror-unsupported-format-character-while-forming-strings – doctorlove

+0

错误在该行7 (IMAGE_SIZE [1])((((文件 “C:/Users/RIDHA/.PyCharmCE2017.1/config/scratches/33.py”,第26行,在 图片((4.37337,47.43572),(256, 256), “test.jpg放在”) 文件 “C:/Users/RIDHA/.PyCharmCE2017.1/config/scratches/33.py”,第17行,在图像 IMAGE_SIZE [1]))) – rida

回答

0

您使用URL作为格式字符串%操作。然而,URL包含被编码为%xx,其中xx是字符的(对于结肠:和2F为斜线/ 3A)十六进制代码的几个字符。这些%字符被解释为格式规范的开端。您应该用双%%代替单一%通过%操作,以避免解释,或摆脱%运营商的完全和使用format方法,而不是逃避它们。

BTW,我没有看到你的字串任何实际格式规范 - 你到底想作为d1价值?

编辑:所以我猜正确的代码是这样的:

d1 = "http://eumetview.eumetsat.int/geoserv/wms?LAYERS=overlay%3Ane_10m_coastline%2Coverlay%3Ane_10m_admin_0_boundary_lines_land&STYLES=&TRANSPARENT=TRUE&FORMAT=image%2Fpng8&VERSION=1.3.0&TILED=true&EXCEPTIONS=INIMAGE&SERVICE=WMS&REQUEST=GetMap&CRS=EPSG%3A4326&BBOX={},{},{},{}&WIDTH={}&HEIGHT={}".format(
    coordinates[0], 
    coordinates[1], 
    image_size[0]/2, 
    image_size[1]/2, 
    image_size[0], 
    image_size[1]) 

我仍然不知道在哪里niveau_zoom_satellite适合这一点。

+0

我只是不会可下载的卫星图像 – rida

+0

嗯,这个回答并没有真正让事情更加清楚你有一个网址,你有一些变量 - 'niveau_zoom_satellite','coordinates','image_size' - 其值大概应更换的某些部分的URL。** **哪个部位?我会认为'image_size'包含的值THA后宽'吨应该去='和'HEIGHT ='分别,但对于其他人呢? –

+0

好,这个变量的每一个值分别有一个数值,用于IMAGE_SIZE是他们countains WIDTH之后应该去值=和高度,但前值图像 – rida

0

其抱怨在D1分辨率约%3An。最好在这里使用str.format()。

例如:

d1 = "www.blabla.com/{var1}asdasd".format(var1=5) 

这将产生:

d1 = "www.blabla.com/5asdasd"